पहले से चल रहे स्क्रीन सेशन को कमांड भेजें


11

मैं ओपनरोलिसिस में एक रनिंग ग्नू स्क्रीन सेशन (4.00.03) को कमांड भेजने की कोशिश कर रहा हूं, लेकिन इसे किसी भी कमांड के संयोजन से चलाने के लिए नहीं मिल सकता screen -X

ठीक है, मैं इसके साथ एक स्क्रीन सत्र शुरू करता हूं screen -S test, और फिर इसके साथ screen -r -X "date"ही मुझे तारीख दिखाने की कोशिश करता हूं, जब मैं इसे फिर से जोड़ूंगा। लेकिन न तो स्क्रीन में कोई त्रुटि संदेश आया और न ही आउटपुट हुआ। मैंने कई संयोजनों के साथ कोशिश की, जो मुझे याद भी नहीं है।

कोई संकेत है कि इसे कैसे पूरा किया जाए?

मैं ऐसा क्यों कर रहा हूं इसका कारण है, क्योंकि मेरे पास एक कार्यक्रम है, जो डेमॉन के रूप में नहीं आता है, और मैं इसे एक स्क्रीन सत्र में शुरू करना चाहता हूं, इसलिए मैं बाद में देख सकता हूं कि क्या चल रहा है।


1
ऐसा लगता है, जैसे कि यह "कमांड" जिसे वे मैन पेज के बारे में बता रहे हैं, स्क्रीन कमांड के लिए है, जैसे स्क्रीन सेशन के लिए सेटिंग्स। शेल के लिए कमांड भेजने के बजाय, जिसे स्क्रीन सेशन में खोला जाता है। तो, किसी को भी यह कैसे एक पटकथा के साथ होने का विचार है ??

@Axon: हाँ, -X स्क्रीन कमांड भेजता है, शेल कमांड नहीं, लेकिन स्क्रीन में एक कमांड 'स्क्रीन' होता है जो नई स्क्रीन विंडो खोल सकता है।

जवाबों:


18

वास्तव में यह काफी सरल है। आप निम्नलिखित का उपयोग कर सकते हैं:

screen -S sessionname -X stuff 'command'`echo -ne '\015'`

echo -ne '\015'Enterकुंजी दबाने का अनुकरण करता है ।

नोट: वह 'सामान' एक स्क्रीन कमांड है। http://www.gnu.org/software/screen/manual/screen.html#Stuff


क्या आप कृपया बता सकते हैं कि "सामान" क्या दर्शाता है? यह एक नाम है ... या कमांड ... या अन्य पैरामीटर?
सेरिन ऑग

यह वास्तव में काम करता है, लेकिन मैं यह नहीं कहूंगा कि यह किसी भी तरह से है;) यह कुछ ऐसी है जैसे कि कीपेड ईवेंट्स और स्क्रीन पर न्यूलाइन पास करना। क्या केवल सामान्य स्क्रीन पर कमांड निष्पादित नहीं होती है ...?
डुकिन

@ साकिन: stuffएक स्क्रीन कमांड है, जिसमें स्टड में एक स्ट्रिंग 'सामान' है
konrad

यह बहुत अच्छा है, लेकिन किसी कारण से यह "स्क्रीन -RSSname-X सामान 'ls -l' echo -ne '\015'" के साथ काम नहीं करता है , क्यों?
e271p314

यह तब तक काम नहीं करता जब तक मैं दो बार कमांड नहीं चलाता ... और अलग-अलग कमांड लाइनों पर ... अगर मैं कुछ screen -d -m -S sessionname; screen -S sessionname -X [...]नहीं (screen -d -m -S sessionname&)&sleep 10;screen -S sessionname -X [...]करता तो कभी भी काम नहीं करेगा यहां तक ​​कि एक नया स्क्रीन सत्र बनाने के अलावा कुछ भी नहीं करता है। डाउन-वोटिंग
user3338098

5

आप चाहते हैं जैसे लगता है:

$ स्क्रीन -S परीक्षण -d -m -c / dev / null - sh -c 'तारीख; $ SHELL निष्पादित करें

-एस टेस्ट: इस सत्र को नाम दें
-d -m: प्रारंभ स्क्रीन अलग
-c / dev / null: अनदेखा करें ~ / .स्क्रीनrc (एक अलग फ़ाइल प्रदान करें या इस विकल्प को छोड़ दें)
  जैसी जरूरत थी)
- - स्क्रीन विकल्पों का अंत
श-क 'तारीख; '$ शेल' निष्पादित करें: स्क्रीन को चलाने के लिए कमांड, ध्यान दें कि यदि यह कमांड
  सिर्फ 'तारीख' थी तो स्क्रीन तुरंत बाहर निकल जाएगी। अगर आप बाहर नहीं निकलना चाहते
  आपके आदेश से बाहर निकलने के बाद स्क्रीन, तो आप उपयोग कर सकते हैं:
    $ स्क्रीन -S परीक्षण -d -m -c / dev / null - यहाँ आपकी आज्ञा

या शायद आप सिर्फ dtach चाहते हैं ।


इस परिणाम में कुछ नहीं चल रहा है। कोई सफलता या त्रुटि संदेश नहीं, लेकिन screen -listदिखाता है कि कोई सत्र खुला नहीं है।
सेरिन ऑग

इस जवाब ने मेरे लिए काम किया। स्क्रीन विकल्पों को समाप्त करने के लिए कुंजी थी -।
प्लाजगोथ

1
screen -S <session_name> -X screen [-t <title>] <shell_command> [<args>]

(शीर्षक के साथ एक नई विंडो खोलें शीर्षक मौजूदा सत्र नामित में) session_name , और निष्पादित shell_command (वैकल्पिक तर्क के साथ args )

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