我希望我的默认 bash shell 能够直接进入 tmux,而不是每次都必须输入 tmux。
答案1
@StarNamer 的回答一般来说是准确的,尽管我通常会进行以下测试以确保
tmux
系统上存在- 我们处于交互式 shell 中,并且
tmux
不尝试在自身内部运行
所以,我会将其添加到.bashrc
:
if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
exec tmux
fi
参考
- 使用 bash
command
检查命令是否存在 -http://man7.org/linux/man-pages/man1/bash.1.html#SHELL_BUILTIN_COMMANDS - 为什么使用
command
而不是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_PANES
答案2
每次登录 shell 时启动 tmux,来自 Arch wiki,似乎有效。只需将以下 bash 代码行添加到.bashrc
别名之前;其他 shell 的代码非常相似:
[[ $TERM != "screen" ]] && exec tmux
答案3
添加一行像
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session && exit;}
在你的 bashrc 文件中可能会完成这项工作。请注意,一旦您分离或退出 tmux,此行将退出 ssh 并终止连接。我喜欢这种配置,因为它可以节省终止连接的击键次数。但是,如果您不喜欢这个(我认为这不太可能)并且宁愿在终止后保留在登录 shell 中,只需删除该exit
部分:
[ -z "$TMUX" ] && { tmux attach || exec tmux new-session;}
另请注意,您不应使用 换行tmux attach
,exec
因为这会导致在没有要附加的 tmux 会话时关闭连接。
答案4
我成功使用了
case $- in *i*)
[ -z "$TMUX" ] && exec tmux
esac
在我的.zshrc
。如果您使用的是 bash,请将其放入您的.bashrc
bash 中。
我也只是尝试设置tmux
为我的默认 shell ( chsh -s $(which tmux)
),它似乎破坏了通过 SSH 的直接命令执行,例如ssh $some_server echo foo
不会产生任何输出。