如何设置默认 shell 来启动 tmux

如何设置默认 shell 来启动 tmux

我希望我的默认 bash shell 能够直接进入 tmux,而不是每次都必须输入 tmux。

答案1

@StarNamer 的回答一般来说是准确的,尽管我通常会进行以下测试以确保

  1. tmux系统上存在
  2. 我们处于交互式 shell 中,并且
  3. tmux不尝试在自身内部运行

所以,我会将其添加到.bashrc

if command -v tmux &> /dev/null && [ -n "$PS1" ] && [[ ! "$TERM" =~ screen ]] && [[ ! "$TERM" =~ tmux ]] && [ -z "$TMUX" ]; then
  exec tmux
fi

参考

答案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 attachexec因为这会导致在没有要附加的 tmux 会话时关闭连接。

答案4

我成功使用了

case $- in *i*)
    [ -z "$TMUX" ] && exec tmux
esac

在我的.zshrc。如果您使用的是 bash,请将其放入您的.bashrcbash 中。


我也只是尝试设置tmux为我的默认 shell ( chsh -s $(which tmux)),它似乎破坏了通过 SSH 的直接命令执行,例如ssh $some_server echo foo不会产生任何输出。

相关内容