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

6
我不确定是否有类似的问题被提出,但我在SO中没有找到。
我正在使用gnome-terminal + tmux。我在我的.zshrc文件中添加了if [ "$TMUX" = "" ]; then tmux; fi,所以当我启动终端时,我会自动进入tmux。每次我按下Ctrl-D并退出tmux时,我必须再次按下Ctrl-D才能退出终端。
现在,我可以在我的.zshrc或tmux.conf中放什么来使我只需按一次就退出tmux和终端。
我认为我可以添加一个监听器来捕获tmux退出事件。如果发生该事件,则让我退出窗口。但我不知道如何实现这一点。任何帮助将不胜感激!

@CharlesDuffy 对不起,我忘记说明如何启动tmux了,我现在会重新编辑我的问题。 - WW00WW
顺便提一下,以后关于交互式 shell 使用的问题(与脚本编写不同)通常更适合在 [unix.se] 或 SuperUser 上提问。 - Charles Duffy
@CharlesDuffy 好的,谢谢提醒。 - WW00WW
1个回答

9
如果您使用exec启动tmux,如下所示:
exec tmux

...父进程的shell将不再存在于内存中,因此退出tmux不会返回到它。


因此,在您的dotfiles中:

if [ -t 0 ] && [[ -z $TMUX ]] && [[ $- = *i* ]]; then exec tmux; fi

[ -t 0 ]是一个安全特性:如果你的标准输入不是TTY,则它会避免继续执行。同样,$-检查也避免在非交互式shell上运行。


顺便提一下——我建议将这部分内容添加到您的终端配置中,而不是shell配置中,以避免无意中影响其他类型的shell(例如通过sshd启动的shell,特别是由自动化工具而不是人类用户启动的shell)。脚本不应该模拟TTYs,或者声明它们是交互式的shell,而事实上它们并不是,但实际上这种做法往往会导致意外情况的发生。


但是我正在使用Ubuntu18的gnome终端,我还没有找到终端配置文件。我使用zsh作为默认shell,所以我将其放在我的.zshrc中。 - WW00WW
我已经有一段时间没有使用GNOME了,但我记得可以通过点击GUI菜单进行配置。 - Charles Duffy
根据https://unix.stackexchange.com/questions/81165/use-a-different-shell-by-default-in-each-terminal-emulator,gnome-terminal配置文件编辑器中应该有一个选项可以使用自定义命令代替调用默认shell。 - Charles Duffy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接