Ctrl-d로 tmux가 종료되지 않게하려면 어떻게해야합니까?


30

나는 서버에서 tmux를 사용하고 최근에 ctrl-d가 tmux를 종료하고 모든 세션 정보를 잃는다는 것을 알았습니다. 내 의도는 단순히 ssh 세션을 끝내는 것이지만 너무 늦게까지 tmux에 있다는 것을 알지 못했습니다.

ctrl-d를 사용할 때 나중에 조심해야한다는 것을 알고 있지만 우연히 ctrl-d를 칠 때 tmux가 종료되는 것을 막을 방법이 있는지 궁금합니다. 프롬프트, 확인 또는 분리와 같은 솔루션이 좋습니다.

답변:


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.
카스

7
IGNOREEOF 환경 변수를 설정해도 zsh에는 영향을 미치지 않지만 "set -o ignoreeof"또는 "setopt ignoreeof"는 영향을줍니다.
sgtpep

11

IGNOREEOF나를 위해 작동하지 않았으므로 .tmux.conf에서 Ctrl+ D에 바인딩 detach했습니다.

bind-key -n C-d detach

이는 -ntmux 접두사와 같이 사전 이스케이프 시퀀스가 ​​필요하지 않음을 의미합니다.


1 년 반 후에 IGNOREOFzsh를 사용하고 있기 때문에 이전에는 작동하지 않았습니다. setopt ignoreeof에서 .zshrc작동합니다. 그러나 나는 tmux가 소스를 얻기 위해 모든 tmux 세션을 죽여야했다 .zshrc. 어쩌면 내가 .zshrctmux 내 에서 소스 를 제공 할 수 있습니다 ...
Rohmer

1
나는 이것을 사용했지만 성가신 한계가있다 : 그것은 Ctrl + D가 쉘이나 다른 것으로 보내지는지 여부에 관계없이 모든 Ctrl + D에서 분리됩니다 cat > some_new_file.txt.
Mihai Danila

그러나 이는 tmux를 사용하면 창을 닫을 수 없으므로 창을 더 많이 열면 부작용이 ^D있습니다.
Mr. Tao

업데이트 마지막 창 / 창만 유지하려는 사람 :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 zsh나는 .zshrc와 함께 연주하고있을 때 TMUX 내 zsh을 다시 시작
krry

6

게다가 chepner의 대답은 당신이 설정하여 완전히 EOF 전송에서 터미널을 중지 할 수 있습니다 eofundefstty:

stty eof undef

다음으로 재설정 :

stty eof '^d'
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.