Як я можу запобігти виходу tmux за допомогою Ctrl-d?


30

Я використовую tmux на своєму сервері, і нещодавно я встановив, що ctrl-d вийде з tmux і втратить всю інформацію про сеанс, я мав намір просто закінчити сеанс ssh, але не помітив, що я все ще був у tmux до занадто пізнього часу.

Я знаю, що мені слід бути обережним у майбутньому при використанні ctrl-d, але мені було цікаво, чи існує спосіб запобігти виходу tmux при ударі ctrl-d випадково? Таке рішення, як підказка, підтвердження чи відключення, було б добре.

Відповіді:


35

Якщо бути точним, Ctrldце не вихід tmux, а скоріше оболонка. Якщо ця оболонка запущена на єдиній панелі останнього вікна tmuxсеансу, сеанс закінчується і tmuxклієнт виходить.

Щоб уникнути Ctrldвиходу з оболонки, ви можете встановити IGNOREEOFзмінну оболонки або встановити параметр ignoreeofоболонки. Помістіть у своєму .bashrcфайлі одне з наступних :

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

set -o ignoreeof  # Same as setting IGNOREEOF=10

6
Це чудово, дякую. Я тільки потребував tmux так що я використовував set-environment -g 'IGNOREEOF' 2в .tmux.confі тепер мені потрібно вдарити Ctrl-D в 3 рази , щоб вийти , і я також попередив , кожен раз з повідомленням: Use "logout" to leave the shell.
Cas

7
Встановлення змінної середовища IGNOREEOF не робить ефекту в zsh, але "set -o ignoreeof" або "setopt ignoreeof" робить.
sgtpep

11

IGNOREEOFне працював для мене, тому я просто прив'язав Ctrl+ Dдо detach.tmux.conf:

bind-key -n C-d detach

У -nні в якому разі перед послідовність виходу не потрібно, як і tmux префікс.


Півтора року пізніше IGNOREOFвін не працював для мене раніше, оскільки я використовую zsh. setopt ignoreeofу .zshrcтворах. Але мені довелося вбити всі tmux сеанси, щоб tmux на джерело .zshrc. Можливо, я міг би знайти .zshrcзсередини тмукс ...
Ромер

1
Я використовував це, але він має прикро обмеження: він відключається від будь-якого Ctrl + D, будь то надісланий в оболонку чи на щось подібне cat > some_new_file.txt.
Михай Даніла

Однак це має побічний ефект у tmux з відкритими більше панелями, оскільки це не дозволяє вам закрити область ^D.
Містер Тао

ОНОВЛЕННЯ Для тих, хто хоче зберегти останнє вікно / панель: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'
Фредерік Чжан

1
@Rohmer, prezto навчив мене використовувати exec zshдля перезавантаження zsh в межах tmux, коли я граю з .zshrc
krry

6

Крім chepner в відповідь ви можете зупинити висновок з посилки EOF повністю, встановивши eofна undefз stty:

stty eof undef

Скинути за допомогою:

stty eof '^d'
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.