在 ssh 登录时运行 tmux

在 ssh 登录时运行 tmux

我希望 tmux 在 ssh 登录时启动。

典型的建议是将其添加到~/.bashrc

if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ] && [[ $- =~ i ]]; then
  tmux attach-session -t mysession 2>/dev/null || tmux new-session -s mysession
fi

但是当我登录时,我从 tmux 收到此错误:

服务器丢失

......然后我像往常一样陷入困境。


更新

当我添加睡眠时:

if [ -z "$TMUX" ] && [ -n "$SSH_TTY" ] && [[ $- =~ i ]]; then
  tmux attach-session -t mysession 2>/dev/null || $(sleep 1 && tmux new-session -s mysession)
fi

...然后就可以了。奇怪的!是什么原因?

答案1

tmux自动启动~/.bash_profile(对于登录 shell)或~/.bashrc(对于交互式 shell),请使用类似

if [[ -z $TMUX ]] && [[ -n $SSH_TTY ]]; then
    session=mysession

    if tmux has-session -t "$session" 2>/dev/null; then
        exec tmux attach-session -t "$session"
    else
        exec tmux new-session -s "$session"
    fi
fi

tmux如果 shell 是由 启动的,则这会将 shell 替换为会话ssh,除非当前 shell 已在其中运行tmux

对于较新版本的tmux,您应该能够使用

if [[ -z $TMUX ]] && [[ -n $SSH_TTY ]]; then
    exec tmux new-session -A -s mysession
fi

你会想要这样做设置影响终端功能和区域设置的变量,例如TERM和(如果您设置了这些)。LC_*

请记住,ssh需要一个伪终端才能运行tmux,因此您必须连接ssh -t(或使用RequestTTY forcein~/.ssh/config进行连接)。

相关内容