Ctrl-dでtmuxが終了しないようにするにはどうすればよいですか?


30

サーバーでtmuxを使用していますが、最近、ctrl-dがtmuxを終了し、すべてのセッション情報を失うことになりました。私の意図は、sshセッションを単に終了することでしたが、手遅れになるまでtmuxにいることに気づきませんでした。

私はctrl-dを使用するときに将来注意する必要があることを知っていますが、誤ってctrl-dを押したときにtmuxが終了しないようにする方法があるのだろうか?プロンプト、確認、デタッチなどの解決策は問題ありません。

回答:


35

正確にCtrldは、exit 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

これ-nは、tmuxプレフィックスのように、事前のエスケープシーケンスが不要であることを意味します。


1年半後、IGNOREOFzshを使用しているため、以前は機能しませんでした。setopt ignoreeof.zshrc動作します。しかし、tmuxをsourceにするには、すべてのtmuxセッションを強制終了する必要がありました.zshrc。たぶん、.zshrctmux内から調達できたかもしれません...-
ローマー

1
私はこれを使用していましたが、面倒な制限があります:シェルまたはのようなものに送信されているかどうかにかかわらず、Ctrl + Dでデタッチしますcat > some_new_file.txt
ミハイダニラ

ただし、これは、を使用してペインを閉じることができないため、より多くのペインを開くという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'
フレデリック・チャン

1
@ Rohmer、preztoは、.zshrcでexec zsh遊んでいるときにtmux内でzshを再起動する方法を教えてくれました
krry

6

chepnerの答えに加えeofundef、withを設定することで端末がEOFを完全に送信するのを止めることができますstty

stty eof undef

リセット:

stty eof '^d'
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.