如何使用Ctrl-d阻止tmux退出?


30

我在我的服务器上使用tmux,最近我发现我的成本是ctrl-d将退出tmux并丢失所有会话信息,我的意图是简单地结束ssh会话但没注意到我仍然在tmux直到为时已晚。

我知道在将来使用ctrl-d时我应该小心,但是我想知道是否有办法防止tmux因意外击中ctrl-d而退出?提示,确认或分离等解决方案都可以。

Answers:


35

确切地说,Ctrld不退出tmux,而是退出壳。如果该shell在tmux会话中最后一个窗口的唯一窗格中运行,则会话结束,tmux客户端退出。

要防止Ctrld退出shell,可以设置IGNOREEOFshell变量,或设置ignoreeofshell选项。将以下内容之一放入您的.bashrc文件中:

IGNOREEOF=10   # Shell only exists after the 10th consecutive Ctrl-d

set -o ignoreeof  # Same as setting IGNOREEOF=10

5
那太好了,谢谢。我只需要它TMUX所以我用set-environment -g 'IGNOREEOF' 2.tmux.conf,现在我需要按Ctrl-d 3次退出,我与消息每次还警告说: Use "logout" to leave the shell.
CAS大全MSDS

7
设置IGNOREEOF环境变量在zsh中没有效果,但“set -o ignoreeof”或“setopt ignoreeof”确实没有效果。
sgtpep 2013年

11

IGNOREEOF我没有工作,所以我只是必然Ctrl+ Ddetach在.tmux.conf:

bind-key -n C-d detach

-n意味着不需要先前的转义序列,比如tmux前缀。


一年半之后,IGNOREOF因为我使用zsh ,之前没有为我工作。setopt ignoreeof.zshrc工作中。但我不得不杀死tmux的所有tmux会话来源.zshrc。也许我可以.zshrc从tmux内部采购......
Rohmer

1
我一直在使用它,但它有一个恼人的限制:它在任何Ctrl + D上分离,无论是发送到shell还是类似的东西cat > some_new_file.txt
Mihai Danila

但是,这会在tmux中产生副作用,打开更多窗格,因为它不会让您关闭窗格^D
陶先生于2002年

更新对于那些只想保留最后一个窗口/窗格的人:bind -n C-d if-shell -b 'USHELL="$(basename "$(getent passwd $USER | cut -d: -f7)")"; [ $(tmux list-windows | wc -l) -eq 1 -a $(tmux list-panes | wc -l) -eq 1 -a $(pstree $PPID | egrep "\\b$USHELL\$" | grep -o $USHELL | wc -l) -eq 1 ]' detach 'send C-d'
Frederick Zhang

1
@Rohmer,prezto教我用exec zshtmux重启zsh当我正在玩
.zshrc时

6

除了chepner的答案,你完全可以通过设置阻止发送EOF终端eofundef使用stty

stty eof undef

重置:

stty eof '^d'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.