मेरे पास एक शेल स्क्रिप्ट है, जो पृष्ठभूमि में लॉन्च की गई script.sh
कमांड के साथ है cmd
, जो है:
#!/bin/bash
…
cmd &
…
यदि मैं एक टर्मिनल एमुलेटर खोलता हूं (मैंने xfce4- टर्मिनल और गनोम-टर्मिनल की कोशिश की है) और script.sh
भीतर चल रहा है, तो मेरी कमांड cmd
को प्रभावी ढंग से निष्पादित किया गया है, और पृष्ठभूमि में निष्पादित किया गया है, जैसा कि अपेक्षित था।
लेकिन, अगर मैं पिछले एक से एक टर्मिनल एमुलेटर खोलता हूं (या मेरे डेस्कटॉप सत्र की शुरुआत में, जो मेरा वास्तविक उपयोग मामला है), और मेरी स्क्रिप्ट निष्पादित करें
xfce4-terminal -H -x script.sh (or gnome-terminal -x script.sh)
कमांड cmd
अब निष्पादित नहीं है।
मैंने पाया कि मैं इसे set -m
अपनी स्क्रिप्ट में डालकर इसे लागू करने के लिए बाध्य कर सकता हूं, लेकिन मुझे समझ नहीं आता कि इस मामले में यह आवश्यक क्यों है (न ही पर्याप्त, वास्तव में), और पिछले एक में नहीं। वास्तव में, अगर मैं set -o
अपनी स्क्रिप्ट में एक डाल देता हूं, तो मैं दोनों मामलों में एक ही आउटपुट प्राप्त करता हूं।
क्या कोई मुझे यह समझा सकता है, और / या मुझे शेल स्क्रिप्ट में पृष्ठभूमि नौकरियों के साथ आगे बढ़ने का सही तरीका बता सकता है? धन्यवाद!
संपादित करें: वास्तव में, cmd
दोनों मामलों में निष्पादित किया जाता है, लेकिन दूसरे में, इसे तुरंत समाप्त कर दिया जाता है script.sh
। इसे रोकने के लिए, कोई भी उपयोग कर सकता है nohup
, लेकिन यह पर्याप्त नहीं है, और यह मेरे लिए सबसे अजीब बात है: एक को भी डाल देना है sleep 1
, या ऐसा कुछ है, जो प्रक्रिया को पृष्ठभूमि में ठीक से लॉन्च करने की अनुमति देता है, और माता-पिता के खोल से अलग हो जाता है, अन्यथा यह भी मारा जाता है।
मैं वास्तव में दो गोले के बीच व्यवहार में इस अंतर को नहीं समझता हूं, क्योंकि दोनों गैर-संवादात्मक हैं, जैसा कि पिछली टिप्पणी में कहा गया है।
cmd
ऐसी चीज का चयन करता हूं, जिसे किसी कार्य प्रबंधक में देखा जा सकता है, जैसे sleep n
कि n
काफी बड़े। लेकिन कोई GUI के साथ कुछ चुन सकता है, जैसे firefox
या कुछ और।
cmd
अमल नहीं हो रहा है? क्या यह आसानी से और विशिष्ट रूप से पीएस के आउटपुट में पाया जाता है (और इसे खोजने के लिए लंबे समय तक रहता है), या क्या यह ध्वनि या अन्य जीयूआई संकेत करता है?