use*_*089 171
@StarNamer 的回答通常是准确的,但我通常会包含以下测试以确保 (1) tmux 存在于系统中,(2) 我们处于交互式 shell 中,以及 (3) tmux 不会尝试在其中运行本身:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
Run Code Online (Sandbox Code Playgroud)
参考
command检查命令是否存在 - http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDScommand而不是which检查命令的存在 - https://unix.stackexchange.com/a/85250$PS1检查交互shell - https://www.gnu.org/software/bash/manual/html_node/Is-this-Shell-Interactive_003f.html$TERM环境变量的预期状态“对于在 tmux 内运行的所有程序” - http://man7.org/linux/man-pages/man1/tmux.1.html#WINDOWS_AND_PANESSta*_*mer 66
在Arch wiki 的每次 shell 登录时启动 tmux似乎有效。只需将以下 bash 代码行添加到您.bashrc的别名之前;其他 shell 的代码非常相似:
[[ $TERM != "screen" ]] && exec tmux
Run Code Online (Sandbox Code Playgroud)
hua*_*hao 31
添加一行,如
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
Run Code Online (Sandbox Code Playgroud)
在您的 bashrc 文件中可能会完成这项工作。请注意,一旦您分离或退出 tmux,此行将退出 ssh 并终止连接。我喜欢这种配置,因为它可以节省击键来终止连接。但是,如果您不喜欢这个(我认为这不太可能)并且宁愿在终止后留在登录 shell 中,只需删除该exit部分:
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
Run Code Online (Sandbox Code Playgroud)
另外请注意,你不应该换tmux attach用exec,因为这将导致关闭连接时没有TMUX会话重视。
小智 8
有chsh更改登录 shell 的命令。咨询man chsh。
创建tmux您的登录 shell,但不要忘记首先配置default-shell设置tmux!
示例~/.tmux.conf:
set-option -g default-shell "/bin/bash"
Run Code Online (Sandbox Code Playgroud)
tmux在设置为登录 shell之前,您需要先对此进行测试。
我将广泛的检查与条件会话检查结合起来,并对其进行了自己的调整,以创建一个连接到或以其他方式创建的默认会话。除非您在另一个 tmux 会话中,或者满足其他保护条件。
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
tmux a -t default || exec tmux new -s default && exit;
fi
Run Code Online (Sandbox Code Playgroud)
基于这些答案:
https://unix.stackexchange.com/a/306165/198110
https://unix.stackexchange.com/a/113768/198110
我正在成功使用
case $- in *i*)
[ -z "$TMUX" ] && exec tmux
esac
Run Code Online (Sandbox Code Playgroud)
在我的.zshrc. 如果您使用的是 bash,请将其放入您的.bashrc。
我也只是尝试设置tmux为我的默认 shell ( chsh -s $(which tmux)) 并且它似乎破坏了通过 SSH 的直接命令执行,例如ssh $some_server echo foo不会产生任何输出。
| 归档时间: |
|
| 查看次数: |
126412 次 |
| 最近记录: |