स्क्रिप्ट से भागो (GNU) स्क्रीन


11

मैं स्क्रीन सेशन के अंदर लेकिन एक स्क्रिप्ट से कुछ एप्लिकेशन लॉन्च करना चाहता हूं।
स्क्रिप्ट के बिना मैं सिर्फ स्क्रीन लॉन्च करूंगा, फिर क्रॉटल-एसी के साथ एन विंडो खोलें और प्रत्येक विंडो में प्रोग्राम निष्पादित करें।

मैंने निम्नलिखित कोशिश की

screen -d -m -S test
screen -S test -X exec tail -f /var/log/messages
screen -S test -X screen
screen -S test -X exec tail -f /var/log/xinetd.log

लेकिन जब मैं सत्र संलग्न करता हूं तो पूंछ नहीं चल रही है। अगर मैं सत्र को सिर्फ एक और टर्मिनल से screen -d -m -S startupचलाता हूं तो screen -S startup -X exec tail -f /var/log/messagesयह काम करता है।

क्या मैं कुछ भुल गया ?

एलेक्सडी जवाब के बाद संपादित करें :

एक आधा काम कर समाधान है

screen -d -m -S test tail -f /var/log/messages
screen -S test -X screen tail -f /var/log/xinetd.log

स्क्रीनिंग कमांड (एक के बाद -X) कमांड के साथ काम कर रहा है, जबकि निष्पादन संभवत: इसलिए नहीं है क्योंकि निष्पादन एक चालू विंडो को परिभाषित करने की उम्मीद करता है, जबकि स्क्रीन अलग होने पर कोई चालू नहीं होता है। इस टिप्स के लिए एलेक्सडी को धन्यवाद ।

लेकिन एक अजीब दुष्प्रभाव है: जब प्रोग्राम बंद हो जाता है (यदि आप स्क्रीन सत्र संलग्न करते हैं और crtl-c पूंछ, या पूंछ को मारते हैं) तो स्क्रीन विंडो बंद हो जाएगी।
तो व्यवहार Crtl-A c के समान नहीं है और कमांड चलाएं
दूसरा साइड इफेक्ट यह है कि आप 2 कमांड को चेन नहीं कर सकते


screen हमेशा समाप्त होता है जब कमांड जिसके साथ लॉन्च किया गया था, वह समाप्त होता है - यह उपकरण की एक सामान्य विशेषता है :) ..तो अगर आप दौड़ते हैं screen top, तो जब आप छोड़ देंगे top, तो छोड़ screenदेंगे, भी
वॉरन

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

जवाबों:


14

screen -S test -X screen commandआदेश है कि आप अपने डेमॉन सत्र के लिए खिड़कियों जोड़ने की जरूरत है, लेकिन कारणों से आप दे के लिए नहीं है। यह काम करता है क्योंकि -X एक स्क्रीन कमांड लेता है और शेल कमांड नहीं, और विंडो बनाने के लिए स्क्रीन कमांड कहा जाता है, भ्रामक रूप से, स्क्रीन। कोई स्क्रीन कमांड नहीं है। जब तक आप शेल स्क्रिप्टिंग (इस तरह:) का उपयोग करके अपनी कमांड का निर्माण नहीं करते हैं, तब तक कोई चैनिंग नहीं है screen -S script -X screen sh -c 'command1; command2;'

screen -S test -X screenबिना आदेश के साथ कॉल करना बेकार है क्योंकि डिफ़ॉल्ट कमांड एक शेल है, और एक बार शेल खोल देने के बाद, आपके पास उस शेल के अंदर कमांड चलाने के लिए एक नॉनएन्डेक्टिव (और गैर-विचलित) तरीका नहीं है। इंटरेक्टिव शेल के बिना, अपने आप से कमांड चलाना बेहतर है। एक साइड इफेक्ट यह है कि जब कमांड बाहर निकलता है, तो स्क्रीन विंडो में कोई बच्चा नहीं होता है, और बंद हो जाएगा।

अब, आप कमांड को छोड़ने के बाद, वैसे भी खिड़की को खोलने के लिए स्क्रीन पूछ सकते हैं। zombieसक्षम करने के लिए स्क्रीन कमांड का उपयोग करें । आपका अनुक्रम ऐसा दिखता है:

screen -d -m -S script
screen -S script -X zombie qr
screen -S script -X screen tail -f /var/log/messages
screen -S script -X screen tail -f /var/log/xinetd.log

अंतःक्रियात्मक रूप से पुनर्विचार करने के लिए:

screen -S script -r

और अंत में, आप इन -X कमांड को स्क्रीन आर्क स्क्रिप्ट की जगह फिर से लिख सकते हैं।

Screenrc:

zombie qr
screen tail -f /var/log/messages
screen tail -f /var/log/xinetd.log

स्क्रिप्ट:

screen -d -m -S script -c screenrc

हाँ, मुझे पता है कि -X एक स्क्रीन कमांड ले रहा है, इसका मतलब यह है कि जब मैंने कहा था "चेनिंग स्क्रीन कमांड (एक के बाद -X)" (ठीक है यह बिल्कुल स्पष्ट नहीं है) लेकिन एक स्क्रीन निष्पादन कमांड है, आदमी को देखो पृष्ठ, लेकिन जैसा कि आपने कहा कि यह काम करने का कोई तरीका नहीं है जैसा कि गैर-सक्रिय मोड में चाहिए था। वैसे भी AlexD समाधान और आप ज़ोंबी कमांड जोड़ने के साथ मुझे वही मिला जो मुझे चाहिए! धन्यवाद
त्रिज्या

@ टोबू: लाश का उल्लेख करने के लिए +200! मैं अंततः उस भयानक मैनुअल में कभी नहीं देखा होगा!
दाख की

6

यदि आप एक ही प्रभाव चाहते हैं, Ctrl-A cतो आपको screenइसके स्थान पर उपयोग करना चाहिए exec:

स्क्रीन -S परीक्षण -X स्क्रीन पूंछ -f / var / लॉग / संदेश
स्क्रीन -S परीक्षण -X स्क्रीन
स्क्रीन -S टेस्ट -X स्क्रीन टेल -f /var/log/xinetd.log

इसके अलावा, आप अपने आदेशों को $HOME/.screenrc-younameitफ़ाइल ( screen -S test -Xउपसर्ग के बिना ) में ले जा सकते हैं और screen -c $HOME/.screenrc-younameitजब आप विशिष्ट स्क्रीन सत्र बनाना चाहते हैं, तो लॉन्च कर सकते हैं।


Ctrl-A c मेरी तीसरी पंक्ति में है, मुझे लगता है कि निष्पादन कार्य नहीं कर रहा है क्योंकि वर्तमान विंडो में कमांड को निष्पादित करता है जिसे स्क्रीन के अलग होने पर परिभाषित नहीं किया जा सकता है। आपका वर्कअराउंड स्क्रीन और कमांड अच्छा है, मुझे इसे आज़माना चाहिए था! मैं अपने आप को एक उत्तर जोड़ूंगा क्योंकि आपके उत्तर में सत्र निर्माण का अभाव है और एक बेकार रेखा है (2 एक, 1 खिड़की को छोड़ते हुए)
त्रिज्या

वास्तव में यह उम्मीद के मुताबिक काम नहीं कर रहा है, जैसे ही कार्यक्रम बंद हो जाता है खिड़कियां बंद हो जाती हैं। यदि आप स्क्रीन -S टेस्ट -X स्क्रीन ls करते हैं, तो विंडो बंद हो जाएगी और आप कभी भी परिणाम नहीं देखेंगे
त्रिज्या

1

byobu एक विकल्प का उपयोग कर रहा है?


मैं सिर्फ यह कोशिश करता हूं, मैं यह नहीं देखता कि यह कैसे मदद कर सकता है, लेकिन अगर आपके पास बायोबू के साथ काम करने वाला समाधान है तो यह ठीक हो सकता है, मैं केवल एक स्क्रीन केवल समाधान पसंद करता हूं, लेकिन एक ऐड का उपयोग करना कोई समाधान नहीं होने से बेहतर है!
त्रिज्या

1

मैं आज रात एक ही काम कर रहा था, मैं पहले से खुली कई फाइलों के साथ स्क्रीन खोलना चाहता था। मुझे यह सब पता लगाने में थोड़ा समय लगा लेकिन मैं अंत में निम्नलिखित काम करता हूं जो बहुत अच्छी तरह से काम करता है:


#1/bin/sh 
screen -d -m -S CS140 
screen -S CS140 -X screen -t thread.c 
screen -p 1 -S CS140 -X eval 'stuff "vim cs140-ps2/src/threads/thread.c\015"'
screen -S CS140 -X screen -t thread.h 
screen -p 2 -S CS140 -X eval 'stuff "vim cs140-ps2/src/threads/thread.h\015"'
screen -S CS140 -X screen -t palloc.c 
screen -p 3 -S CS140 -X eval 'stuff "vim cs140-ps2/src/threads/palloc.c\015"'
screen -S CS140 -X screen -t intr-stubs.h 
screen -p 4 -S CS140 -X eval 'stuff "vim cs140-ps2/src/threads/intr-stubs.h\015"'
screen -S CS140 -X screen -t pagedir.c 
screen -p 5 -S CS140 -X eval 'stuff "vim cs140-ps2/src/userprog/pagedir.c\015"'
screen -r -d CS140 

यह छह अलग-अलग स्क्रीन बनाएगा, स्क्रीन 1-5 के साथ विभिन्न फाइलें खोलेगी। मैं सभी बारीकियों को नहीं जानता, लेकिन 'सामान' स्क्रीन को अनिवार्य रूप से बताता है कि निम्नलिखित पाठ एक स्क्रीन कमांड नहीं है। 'Eval' तब उद्धरणों में निहित सब कुछ को मिटा देती है। इसके बिना screen -p 4 -S CS140 -X stuff "vim cs140-ps2/src/threads/intr-stubs.h\015" बस इसे निष्पादित किए बिना उद्धृत पाठ को पाइप करता है। Eval एक नई पंक्ति के रूप में '\ 015' पढ़ेगा और इस प्रकार पूर्ववर्ती पाठ को निष्पादित करेगा।

अन्य विवरणों के संदर्भ में, screen -p 1 -S CS140 -X CMD 'CS140' नामक स्क्रीन सत्र की पहली विंडो में 'CMD' भेजने के लिए शेल को बताता है।

उम्मीद है की वो मदद करदे!

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