在 ssh 登录时运行 tmux

lon*_*nix 5 bash login ssh ubuntu 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
Run Code Online (Sandbox Code Playgroud)

但是当我登录时,我从 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
Run Code Online (Sandbox Code Playgroud)

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

Kus*_*nda 6

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
Run Code Online (Sandbox Code Playgroud)

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

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

if [[ -z $TMUX ]] && [[ -n $SSH_TTY ]]; then
    exec tmux new-session -A -s mysession
fi
Run Code Online (Sandbox Code Playgroud)

您可能希望在设置影响终端功能和区域设置的变量(例如和(如果您设置了这些)之后)执行此操作。TERMLC_*

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