सवाल मुझे कैसे पता चलेगा कि मैं लिनक्स "स्क्रीन" के अंदर दौड़ रहा हूं या नहीं?


"स्क्रीन" में उल्लेखित एक कार्यक्रम को संदर्भित किया गया है डिस्कनेक्ट किए गए एसएसएच सत्र से फिर से कनेक्ट कैसे करें । यह एक अच्छी सुविधा है।

लेकिन एक सवाल है जिसे मैं वास्तव में जानना चाहता हूं। मुझे कैसे पता चलेगा कि मैं "स्क्रीन" के अंदर दौड़ रहा हूं? अंतर यह है:

  • यदि हां, मुझे पता है कि मैं वर्तमान टर्मिनल विंडो को सुरक्षित रूप से बंद कर सकता हूं, उदाहरण के लिए, मेरा खोल (बैश इत्यादि) सत्र खोए बिना, एक पुटी विंडो बंद करें।
  • यदि नहीं, मुझे पता है कि टर्मिनल विंडो बंद करने से पहले मुझे किसी लंबित कार्यों का ख्याल रखना होगा।

बेहतर, मैं यह स्थिति PS1 प्रॉम्प्ट में प्रदर्शित करना चाहूंगा ताकि मैं इसे किसी भी समय स्वचालित रूप से देख सकूं।


57
2018-04-06 01:17


मूल


यदि आप स्क्रीन के बजाय tmux का उपयोग करते हैं, तो आपको डिफ़ॉल्ट रूप से थोड़ा स्टेटस बार मिलता है। वे मूल उपयोग के लिए काफी समान हैं। - Samuel Edwin Ward
टेबल पर अपना टोटेम रखें, और इसे स्पिन करें। अगर यह कताई रखता है, तो आप ठीक हैं। अन्यथा आप एक स्क्रीन में हैं:] - Konerak
आप भी उपयोग कर सकते हैं Byobu स्क्रीन और टीएमयूक्स के साथ। इसे लॉगिन पर स्वचालित रूप से लोड करने के लिए सेटअप किया जा सकता है और फिर F6 कुंजी डिस्कनेक्ट हो जाता है और लॉग आउट हो जाता है। - mp3foley
के संभावित डुप्लिकेट कैसे जांचें कि मैं स्क्रीन सत्र में हूं या नहीं? - Andrew Schulman


जवाब:


(से चोरी गया "मैं कैसे बता सकता हूं कि मैं स्क्रीन पर हूं या नहीं?"स्टैक ओवरफ्लो पर और उपयोगकर्ता द्वारा लिखित Jho। अनुलेख आप StackExchange साइटों पर डुप्लिकेट के लिए वोट नहीं दे सकते हैं।)

चेक $STY। यदि यह शून्य है, तो आप "वास्तविक" टर्मिनल पर हैं। यदि इसमें कुछ भी शामिल है, तो यह उस स्क्रीन का नाम है जिसमें आप हैं।

यदि आप स्क्रीन में नहीं हैं:

eric@dev ~ $ echo $STY
eric@dev ~ $ 

यदि आप स्क्रीन में हैं:

eric@dev ~ $ echo $STY
2026.pts-0.ip-10-0-1-71

यदि आप स्क्रीन के बजाय tmux का उपयोग करते हैं, तो भी जांचें $TMUX। इसे अपने प्रॉम्प्ट में जोड़ने के लिए, निम्नलिखित में जोड़ें ~/.bashrc:

if [ -n "$STY" ]; then export PS1="(screen) $PS1"; fi
if [ -n "$TMUX" ]; then export PS1="(tmux) $PS1"; fi

86
2018-04-06 01:24



अगर आप कुछ चलाते हैं sudo डिफ़ॉल्ट रूप से यह पर्यावरण चर का वारिस नहीं करेगा, सहित $STY। परंतु $TERM  है आम तौर पर सूडो पर्यावरण के लिए प्रचारित, तो शायद या तो जांचें $STY  या  $TERM=="screen" - rcoup


ढूंढें $STY जो विवरण प्रदान करता है screen खुद के साथ संवाद करने के लिए उपयोग करता है; $WINDOW तब वर्तमान हो जाएगा screen खिड़की संख्या


14
2018-04-06 05:28





आमतौर पर उपयोग की जाने वाली सरल जांच केवल हिट करना है Ctrl-:

  • अगर कर्सर लाइन की शुरुआत में कूदता है, मैं हूँ अंदर नहीं एक स्क्रीन सत्र।

  • अगर कुछ नहीं हुआ, मुझे पता है कि मैं अंदर हूँ एक स्क्रीन सत्र और मैंने अभी स्क्रीन नियंत्रण कुंजी का उपयोग किया है। मैं फिर मारा  (लाइन की शुरुआत में कूदें), w (वर्तमान स्क्रीन विंडो दिखाएं) या कमांड प्रॉम्प्ट पर वापस जाने के लिए कुछ अन्य "हानिरहित" स्क्रीन कमांड निष्पादित करें।

(बेशक, यह केवल तभी काम करता है जब आप वर्तमान में बैश या सॉफ़्टवेयर के किसी अन्य टुकड़े को निष्पादित कर रहे हैं जो "लाइन की शुरुआत में कूदता है" या Ctrl-a को मारते समय कुछ समान रूप से हानिरहित करता है।)


13
2018-04-06 01:21



यह केवल तभी काम करता है जब आपकी स्क्रीन नियंत्रण कुंजी डिफ़ॉल्ट Ctrl-a पर छोड़ दी जाती है। - ShreevatsaR
नियंत्रण कुंजी मारना + डीडी अलग हो जाएगा और एसएसएच को समाप्त कर देगा। आप अधिक सुविधा के लिए उस संयोजन को हिट कर सकते हैं - akostadinov
जबकि उत्तर वास्तविक प्रश्न के लिए ठीक है, यह विधि स्क्रिप्ट योग्य नहीं है। - Nikodemus RIP


कुंआ, अधिकांश उस समय (चीजों के साथ पेंच करने के किसी के प्रयास अनुपस्थित) TERM पर सेट किया जाएगा screen (या कम से कम उल्लेख करें screen कहीं)।

समस्या का आसान समाधान बस हर जगह स्क्रीन चलाता है। इसके बिना घर मत छोड़ो, मैं कहता हूं।


7
2018-04-06 17:01



$TERM आमतौर पर भी प्रचार करता है sudo, जो एक प्लस है! - rcoup


मैं इसे अपने अंदर रखता हूं .bashrc:

 PS1='[\u@\h \W'
 if [ "$WINDOW" ]; then PS1="$PS1 ($WINDOW)"; fi
 PS1="$PS1]$"

यह मूर्खतापूर्ण नहीं है, लेकिन जब भी मैं एक नई स्क्रीन बनाता हूं, तो यह विंडो नंबर को प्रॉम्प्ट में रखता है। अगर मैं दौड़ नहीं रहा हूँ screen, कोई संख्या नहीं है।


7
2017-09-16 00:56





मेरे पास एक कूलर रास्ता भी है।

निम्नलिखित को अपने ~ / .screenrc में जोड़ें और आपको नीचे एक स्टेटस लाइन दिखाई देगी (उल्टा पाठ में तारीख, समय और सिस्टम लोड दिखा रहा है। नीचे दिए गए मैन पेज लिंक में अधिक से बचने वाले कोड पाए गए हैं।

    hardstatus alwayslastline
    hardstatus string '%Y-%m-%d %c | %l'

एक स्क्रीन सत्र में जब यह स्रोत ctrl-a:source ~/.screenrc

मुझे इसके लिए लिनक्स जर्नल के केली रैंकिन का शुक्रिया अदा करना है। अपने शानदार लेख देखें http://www.linuxjournal.com/article/10950। वह जिस पृष्ठ पृष्ठ खंड को संदर्भित करता है वह पाया जा सकता है http://www.gnu.org/software/screen/manual/screen.html#String-Escapes


3
2018-04-06 14:19





आप प्रक्रिया पेड़ से भी मरम्मत कर सकते हैं $$ यह देखने के लिए कि क्या आपको स्क्रीन उदाहरण मिल रहा है या नहीं। सटीक श्रृंखला शायद आपके सेटअप पर निर्भर करेगी - मेरे ओएस एक्स बॉक्स पर, ए zsh अंदर स्क्रीन है login इसके माता-पिता के रूप में, SCREEN अपने दादा के रूप में, और screen अपने दादाजी के रूप में।


2