当在tmux下ssh到远程机器时,希望显示远程host,google后找到了一段对ssh封装过的函数:
ssh() {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]; then
tmux rename-window "$*"
command ssh "$@"
tmux set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}
这段函数在我的mac上运行效果正常,如下图
但当我在一台linux上运行时,ctrl-d
退出远程ssh时,会一直卡在退出状态,不管ctrl-c
或什么操作也无法回到原bash,如下图
此时只通过tmux的kill-window的操作方式来关掉这个窗口,而在mac下是没有这个问题的,分析了一下,发现在我的mac上,tmux被oh-my-zsh给alias成了一个_zsh_tmux_plugin_run
函数:
➜ which ssh
ssh () {
if [ "$(ps -p $(ps -p $$ -o ppid=) -o comm=)" = "tmux" ]
then
_zsh_tmux_plugin_run rename-window "$*"
command ssh "$@"
_zsh_tmux_plugin_run set-window-option automatic-rename "on" 1>/dev/null
else
command ssh "$@"
fi
}
在_zsh_tmux_plugin_run
又做了一些环境变量的判断和处理,猜测可能是因为这些环境变量的差异所导致,先去掉tmux set-window-option automatic-rename "on"
这句最后对标准输出的重定向,看看输出什么信息,结果在修改之后却可以正常了:
还不太清楚为何这个重定向导致了ssh退出后没法回到原shell下,先记录下这个现象。