关闭 tmux 会话时结束 SSH 会话
Posted
技术标签:
【中文标题】关闭 tmux 会话时结束 SSH 会话【英文标题】:End SSH session when closing tmux session 【发布时间】:2013-07-03 22:57:38 【问题描述】:我已将以下内容添加到我的.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 别名可能会起作用,但我不确定什么会起作用...
【问题讨论】:
【参考方案1】:你可以在运行 tmux 时使用exec
。它将完全控制您正在启动的作业,一旦该进程退出(无论是 tmux
、echo
或 ls
),shell 就会退出。
来自man zshbuiltins
exec ... 将当前 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`
(该脚本显然必须位于您的远程主机上)
【讨论】:
完美!谢谢 :) 去找exec
让它与远程客户端无关,因为我不必记住执行远程命令。以上是关于关闭 tmux 会话时结束 SSH 会话的主要内容,如果未能解决你的问题,请参考以下文章