मेरे पास एक शेल स्क्रिप्ट है, जो पृष्ठभूमि में लॉन्च की गई 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अमल नहीं हो रहा है? क्या यह आसानी से और विशिष्ट रूप से पीएस के आउटपुट में पाया जाता है (और इसे खोजने के लिए लंबे समय तक रहता है), या क्या यह ध्वनि या अन्य जीयूआई संकेत करता है?