Bash
在 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 收到此錯誤:
伺服器失去
…然後我像往常一樣在 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 由 啟動,這將用會話替換 shellssh
,除非目前 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
連接)。