退出tmux后如何自动退出终端

Vol*_*otz 5 shell terminal zsh gnome-terminal tmux

我不确定是否有人问过类似的问题,但我没有在 SO 中找到。

我正在使用 gnome-terminal + tmux。我已经添加if [ "$TMUX" = "" ]; then tmux; fi了我的.zshrc所以当我启动终端时,我会自动输入 tmux。每次我按下Ctrl-D并退出 tmux 时,我都必须Ctrl-D再次按下才能退出终端。

现在,我可以把我的.zshrctmux.conf以退出我的TMUX和终端只有一个按。

我的想法是我可以添加一个侦听器来捕获 tmux 退出事件。如果发生该事件,让我退出窗口。但我不知道如何实现这一目标。任何帮助将不胜感激!

Cha*_*ffy 6

如果你开始tmux使用exec,如:

exec tmux
Run Code Online (Sandbox Code Playgroud)

...父进程 shell 甚至不再在内存中,因此退出 tmux 不会退出。


因此,在您的 dotfiles 中:

if [ -t 0 ] && [[ -z $TMUX ]] && [[ $- = *i* ]]; then exec tmux; fi
Run Code Online (Sandbox Code Playgroud)

[ -t 0 ]是一项安全功能:如果您的标准输入不是 TTY,它会避免前进。同样,该$-检查避免在非交互式 shell 上运行。


顺便说一句 - 我通常建议将这部分作为终端配置的一部分,而不是外壳配置的一部分,以避免无意中影响其他类型的外壳(例如通过 sshd 启动的外壳,特别是由自动化工具而不是人类用户启动的外壳) )。脚本不应该模拟 TTY,或者在它们不是交互时声称它们是交互的 shell,但它在实践中发生,因此这种实践可能会导致意外。