我希望 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 force
in~/.ssh/config
进行连接)。