मैं tmux को Ctrl-d के साथ बाहर निकलने से कैसे रोक सकता हूँ?


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.
Cas

7
IGNOREEOF पर्यावरण चर को सेट करने का zsh में कोई प्रभाव नहीं है, लेकिन "set -o igneof" या "setopt igneof" का प्रभाव पड़ता है।
sgtpep

11

IGNOREEOFमेरे लिए काम नहीं किया तो मैं बस बाध्य Ctrl+ Dको detach.tmux.conf में:

bind-key -n C-d detach

-nसाधन कोई पूर्व एस्केप अनुक्रम tmux उपसर्ग की तरह की जरूरत है,।


डेढ़ साल बाद, IGNOREOFमेरे लिए पहले से काम नहीं किया क्योंकि मैं ज़ीश का उपयोग कर रहा हूं। setopt ignoreeofमें .zshrcकाम करता है। लेकिन मुझे स्रोत के लिए सभी tmux सत्रों को मारना पड़ा .zshrc। शायद मैं .zshrctmux के भीतर से खट्टा हो सकता था ...
रोहोर

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
@ रोहर, प्रीज़्टो ने मुझे सिखाया कि exec zshजब मैं
.zshrc

6

इसके अलावा chepner के जवाब आप की स्थापना करके पूरी तरह EOF भेजने से टर्मिनल बंद कर सकते हैं eofकरने के लिए undefके साथ stty:

stty eof undef

इसके साथ रीसेट करें:

stty eof '^d'
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.