टर्मिनल - अनजाने में बाहर निकलने के बाद सत्र को कैसे पुनः आरंभ करें?


22

कभी-कभी मैं अनजाने में एक टर्मिनल सत्र से बाहर निकल जाता हूं (आमतौर पर क्योंकि मुझे लगता है कि मैं एक दूरस्थ प्रणाली से जुड़ा हुआ हूं, जब मैं नहीं हूं), तो मैं इस बिंदु पर पहुंचता हूं:

यहां छवि विवरण दर्ज करें

मैं इस बिंदु पर सत्र को कैसे पुनः आरंभ कर सकता हूं? मैं खिड़की या टैब को बंद नहीं करना चाहता क्योंकि मेरे पास मेरे सामान्य वर्कफ़्लो के लिए सेट किए गए टैब का एक गुच्छा है, इसलिए मैं बस वर्तमान टैब में सत्र फिर से प्राप्त करना चाहता हूं (यानी बैश प्रॉम्प्ट पर वापस जाएं)।

एकमात्र उपाय जो मैंने अभी तक पाया है वह है टर्मिनल को पूरी तरह से छोड़ना और इसे फिर से खोलना, लेकिन यह आदर्श से बहुत दूर है क्योंकि यह स्पष्ट रूप से कुछ और बाधित करता है जो मैं अन्य टर्मिनल विंडो / टैब में कर रहा हूं।


1
लिनक्स (KDE / Gnome) टर्मिनल एमुलेटर आपको टैब को फिर से ऑर्डर करने देता है। इसलिए यदि आप एक नया टैब शुरू करते हैं, तो आप इसे बंद कर सकते हैं जिसे आपने बंद कर दिया है। क्या OS X के टर्मिनल में ऐसा नहीं है? (मैं एक मैक व्यक्ति नहीं हूं, मैंने इसे केवल "हॉट नेटवर्क प्रश्नों" में देखा था।) मुझे टर्मिनल विंडो में टैब के बजाय बहुत सारे शेल सत्रों को मल्टीप्लेक्स करने के लिए जीएनयू स्क्रीन का उपयोग करना पसंद है। मेरे पास एक और टैब है, जिसमें दूसरे कंप्यूटर पर स्क्रीन सेशन है। मैं कभी-कभी एक और टर्मिनल खोलता हूं अगर मैं एक ही बार में दो चीजें देखना चाहता हूं, लेकिन आम तौर पर मुझे अपने गोले गिने हुए लगते हैं, जिस तरह से स्क्रीन होती है, उसके बजाय
पीटर कॉर्ड्स

1
वैसे भी, मैं एक GUI टैब में एक ही मेजबान पर कई गोले रखने के लिए स्क्रीन (या यदि आप पहले से ही स्क्रीन नहीं जानते हैं) को सुझाएंगे। टैब / स्क्रीन-विंडो के इस दो-स्तरीय पदानुक्रम में बहुत सारे सामान खुले होने की अनुमति है, बिना किसी चीज़ के ट्रैक खोए। साथ ही, जैसा कि मैंने कहा, अलग-अलग गोले के लिए नंबर होने से यह याद रखना आसान है कि ^t 8किसी दिए गए संदर्भ के लिए कौन सी संख्या स्वैप करना है ( उदाहरण के लिए), बजाय गिनती के कि कौन सी टैब क्लिक करें या (या कितने ctrl-pgup को हिट करें) ।
पीटर कॉर्ड्स

1
स्क्रीन और tmux दोनों में प्रत्येक स्क्रीन-विंडो के अंदर कॉन्फ़िगर करने योग्य स्क्रॉलबैक है। मुझे याद नहीं है कि रिबूट के दौरान दृढ़ता के लिए डिस्क पर स्क्रॉलबैक रखने के बारे में कुछ भी देखना, हालांकि! काफी अच्छा है। मानसिक रूप से ट्रैक रखने के लिए तीन टैब काफी आसान हैं। मेरे पास आमतौर पर मेरे होम डेस्कटॉप पर 10 जैसा कुछ है, क्योंकि मैं कमांड लाइन से लगभग सब कुछ करता हूं, न कि जीयूआई फ़ाइल ब्राउज़र। (वीडियो / ऑडियोबुक आदि खेल रहा हूं) मेरे पास cdकोड होने पर आमतौर पर तीन गोले एड टू सोर्स कोड होते हैं, हालांकि, यह आपके उपयोग के साथ मेल खाता है।
पीटर कॉर्ड्स

1
वैसे भी, टैब को चारों ओर खींचने से गलती से टैब बंद करने से उबरना आसान हो जाता है, क्योंकि आप इसे वापस वहीं रख सकते हैं जहां यह जाता है।
पीटर कॉर्ड्स

1
मुझे नहीं लगता कि बहुत सारे लोग स्थानीय रूप से सिंगल टर्मिनल एमुलेटर टैब के अंदर स्थानीय शेल सत्रों के लिए उनका उपयोग करते हैं। आईडीके, शायद अन्य पुराने स्कूल कमांड लाइन के दीवाने भी इसे करते हैं। मुख्य उपयोग-मामला sshकहीं न कहीं आईएनजी के बाद है। मुझे बस स्क्रीन का उपयोग करने की आदत है, और स्थानीय रूप से और दूरस्थ सत्रों में भी इसका उपयोग करते हैं। जैसा कि मैंने इसे समझा है, यदि आपके पास पहले से ही screenआपकी मांसपेशी-मेमोरी नहीं है, तो tmux सीखें क्योंकि स्क्रीन पुरानी और गंभीर है। मैं संभवत: tmuxउन सभी कीबाइंड्स का उपयोग करने के लिए स्विच कर सकता हूं और कॉन्फ़िगर कर सकता हूं जैसा कि मैं उपयोग करता हूं screen, लेकिन स्क्रीन अभी भी मेरे लिए ठीक काम करती है।
पीटर कॉर्ड्स

जवाबों:


26

इस बिंदु पर, टैब वापस लाने का कोई तरीका नहीं है। टर्मिनल सत्र बंद है, और इसमें अब TTY नहीं है। कुछ भी चालाक करने के लिए टैब को संदर्भित करने का कोई तरीका नहीं है। मैं इस फ़ंक्शन को आपके .bashrc या .profile में जोड़ने का सुझाव देता हूं ताकि आपके पास भविष्य में समस्या न हो:

exit() {
    read -t5 -n1 -p "Do you really wish to exit? [yN] " should_exit || should_exit=y
    case $should_exit in
        [Yy] ) builtin exit $1 ;;
        * ) printf "\n" ;;
    esac
}

या, हममें से जो Z Shell का उपयोग करते हैं (इसे अपने .zshrc में जोड़ें):

exit() {
    if read -t5 -q should_exit\?"Do you really wish to exit? [yN] "; then
        builtin exit $1
    fi
}

यह आपके और उस कष्टप्रद निकास आदेश के बीच एक अच्छा सा अवरोध है! भगवान जानता है कि मैंने अतीत में कई बार एक ही काम किया है।


1
आपको यह मिला! अब, 5 सेकंड ( -t 5विकल्प) के बाद, रीड कमांड विफल हो जाएगी, जो इसके बाद निकास कमांड को ट्रिगर करती है।
विलियम टी फ्रूगार्ड

1
बहुत बढ़िया - धन्यवाद - काश मैं आपको दो वोट देता! ;-)
पॉल आर

1
@PaRR: exitयदि आप बैश का उपयोग कर रहे हैं तो आपको उर्फ की जरूरत नहीं है । आप अपनी स्क्रिप्ट डाल सकते हैं ~/.bash_logout
अगली सूचना तक रोक दिया गया।

2
@ डेनिसविलियम्सन: दिलचस्प विचार, लेकिन मुझे यकीन नहीं है कि आप लॉगआउट को कैसे रद्द करेंगे .bash_logout?
पॉल आर

3
@PaRR: उफ़। मैं उस पर विचार करने में विफल रहा! पूर्णता के लिए, आपको भी उपनाम देना चाहिए logoutऔर IGNOREEOF1 (या रिबंड ^ डी) से अधिक सेट करना चाहिए ।
अगली सूचना तक रोक दिया गया।

5

विलियम टी फ्रूगार्ड की स्क्रिप्ट ने वह नहीं किया जो मुझे चाहिए था, क्योंकि आमतौर पर इस स्थिति में जाने का एकमात्र तरीका ^ डी ( ctrl+ D) के माध्यम से है , और exitउस स्थिति के लिए पुनर्परिभाषित ने कुछ नहीं किया। मेरे लिए, डेनिस विलियमसन को स्थापित करने का सुझाव IGNOREEOFपर्याप्त था। मैंने अभी जोड़ा:

# Do not exit on a single ^D, require 2 in a row
IGNOREEOF=1

मेरी ~/.bashrcफ़ाइल में और अब (यदि मैं शीर्ष-स्तरीय शेल में हूं और टर्मिनल से बाहर निकलूंगा) पहला ^ D प्रतिक्रिया उत्पन्न करता है:

Use "logout" to leave the shell.

यदि मैं ^ D को तुरंत टाइप करता हूं, तो शेल बाहर निकलता है, इसलिए जब मैं चाहता हूं तब बाहर निकलना अभी भी आसान है, लेकिन अब एक ^ D मुझे चेतावनी देगा। (यदि आप चाहें, तो आपको IGNOREEOFअतिरिक्त लगातार ^ डी की आवश्यकता के लिए उच्च संख्या में सेट कर सकते हैं ।)

इसके अलावा, यदि मैं एक उप-शेल में हूं, तो पहला ^ D प्रतिक्रिया उत्पन्न करता है:

Use "exit" to leave the shell.

फिर से, एक अतिरिक्त ^ D मुझे बाहर निकाल देगा, और अब मैं एक उप-शेल से बाहर निकलने और शीर्ष-स्तरीय शेल से बाहर निकलने के बीच का अंतर बता सकता हूं।

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