Bash

在 ssh 登錄時執行 tmux

  • November 17, 2019

我希望 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 收到此錯誤:

伺服器失去

…然後我像往常一樣在 bash 中。


更新

當我添加睡眠時:

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

…然後它的工作原理。奇怪的!是什麼原因?

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需要一個偽 tty 才能執行tmux,因此您必須連接ssh -t(或RequestTTY force用於~/.ssh/config連接)。

引用自:https://unix.stackexchange.com/questions/552614