2010-01-05 7 views
8

सोच रहा था कि कैसे मैं इस तरह के रूप में एक कमांड शुरू कर सकते हैं:एक स्क्रीन शुरू करना (यूनिक्स कमांड) + 1 कमांड में कमांड चला रहा है?

while :; do ./myCommand; done; 

लेकिन बजाय हमेशा की तरह

screen -S nameOfMyScreen 

फिर आदेश

while :; do ./myCommand; done; 

कर फिर स्क्रीन को अलग से

^a ^d (Control "a" the control "d" 

मैं इसे शुरू करना और अलग करना चाहता हूं। धन्यवाद!

उत्तर

10
screen -d -m sh -c "while :; do ./myCommand; done;" 

स्पष्टीकरण:

  • -d -m शुरू होता है अलग मोड (सत्र बनाने लेकिन उसे करने के लिए संलग्न नहीं है)
  • sh -c commandline आप के बाद से, एक खोल जो दिया कमांड लाइन (आवश्यक निष्पादित करता है शुरू होता है में स्क्रीन while बिल्टिन का उपयोग कर रहे हैं)।
+0

मेरे सिस्टम पर स्क्रीन का संस्करण कहता है कि -c विकल्प .screenrc की बजाय वैकल्पिक कॉन्फ़िगरेशन फ़ाइल को पढ़ना है। – MikeSep

+0

'-c' स्क्रीन पर नहीं बल्कि 'sh'' को पास किया गया है। स्क्रीन कमांड लाइन पार्सर के बाद 'sh' (यानी डैश के बिना कुछ) पढ़ता है, यह पता है कि कोई और विकल्प नहीं है और बाकी सब कुछ एक आदेश है जिसे निष्पादित किया जाना चाहिए। – Heinzi

+0

आह, मैं सही खड़ा हूं। :) – MikeSep

3

screen -h से, इन उपयोगी लग:

-dmS name  Start as daemon: Screen session in detached mode. 
-X   Execute <cmd> as a screen command in the specified session. 

मैं इस अपने आप को नहीं किया है, लेकिन यह है कि मैं कहां से शुरू करेंगे।

अद्यतन:

मदद के शीर्ष यह भी कहते हैं

Use: path/to/screen [-opts] [cmd [args]] 

तो -X स्विच के रूप में एक खोल आदेश का विरोध करने के एक स्क्रीन आदेश पर अमल हो सकता है। आप -dmS <name> के बाद -X स्विच के बिना अपना कमान डालने में सक्षम हो सकते हैं।

+0

+1। इनमें से एक संयोजन आपका काम करेगा। चूंकि आपका * कमांड * एक स्क्रिप्ट है, इसलिए आपको इसे किसी फ़ाइल में रखना होगा या उसे पास करना होगा या 'bash -c' या इसी तरह का कुछ उपयोग करना होगा। –

संबंधित मुद्दे