我已将以下内容添加到.zshrc
中,以便tmux在通过SSH登录时创建新会话或附加到现有会话:
if [[ -z $TMUX && -n $SSH_TTY ]]; then
me=$(whoami)
if tmux has-session -t $me 2>/dev/null; then
tmux -2 attach-session -t $me
else
tmux -2 new-session -s $me
fi
fi
这似乎有效。但是,如果我退出我的tmux会话,我会被送回zsh。
我能否拥有它以便tmux会话中的exit
也将结束SSH会话?更好的是:tmux中的exit
只能分离tmux会话,然后结束SSH会话吗?
我认为可能是在[[ -n $TMUX ]]
时定义的zsh别名,可以解决这个问题,但我不确定会起作用......
答案 0 :(得分:3)
运行tmux时可以使用exec
。它将完全控制您正在开始的工作,一旦该流程退出(tmux
,echo
或ls
),shell将退出。
从man zshbuiltins
执行...用外部命令替换当前shell而不是分叉。
if [[ -z $TMUX && -n $SSH_TTY ]]; then
me=$(whoami)
if tmux has-session -t $me 2>/dev/null; then
exec tmux -2 attach-session -t $me
else
exec tmux -2 new-session -s $me
fi
fi
另一种方法是放置一个启动或加入tmux的shell脚本,并要求ssh
运行它而不是你的shell。
`alias tmux-ssh="ssh user@target-host -t /home/foo/my-tmux-script`
(该脚本显然必须位于您的远程主机上)