2013-07-12 10 views
5

तो मैं एक विशेष आदेशबाहर निकलें कोड

runuser -s /bin/bash @user_name -c $command > /dev/null 2>&1 & 

मैं कैसे जान सकता हूँ आदेश runuser -s /bin/bash @user_name -c $command सही ढंग से क्रियान्वित है कि क्या के निकास कोड सत्यापित करने के लिए करना चाहते हैं? मैंने $? का उपयोग करने की कोशिश की लेकिन यह काम नहीं करता है क्योंकि यह हमेशा 0 होता है (पुनर्निर्देशन का परिणाम 0 है)

मैं उस आदेश का निकास कोड कैसे प्राप्त कर सकता हूं?

+0

अपने कार्यक्रम पृष्ठभूमि में चल रहा है:

तो अपनी स्क्रिप्ट के लिए आप कुछ इस तरह कर सकते हैं। – Antarus

+1

अपनी पोस्ट को बर्बाद न करें। – ChrisF

उत्तर

11

कार्य की पृष्ठभूमि (& के माध्यम से) पुनर्निर्देशन के कारण निकास कोड उपलब्ध नहीं है।

आपको पृष्ठभूमि कार्य के निकास कोड प्राप्त करने के लिए wait का उपयोग करना चाहिए। पृष्ठभूमि में चल रहा सभी नौकरियों तक

प्रतीक्षा आदेश रोक स्क्रिप्ट निष्पादन समाप्त कर दिया है, या जब तक नौकरी नंबर या प्रक्रिया आईडी के रूप में निर्दिष्ट एक विकल्प समाप्त हो जाता है। यह के बाहर निकलने की स्थिति से बाहर निकलने की स्थिति लौटाता है।

+0

क्या होगा अगर कार्यक्रम पृष्ठभूमि में नहीं चल रहा है, ब्रायन? क्या मुझे एक्जिट कोड भी मिल सकता है? –

3

आप पिछली पृष्ठभूमि प्रक्रिया के ढक्कन को पाने के लिए $! का उपयोग कर सकते हैं। फिर आप wait pid कर सकते हैं। यह तब तक इंतजार कर रहा है जब तक कि पिड के साथ प्रक्रिया पूरी नहीं हो जाती।

runuser -s /bin/bash @user_name -c $command > /dev/null 2>&1 & 
myPid=$! 
wait $myPid 
status=$? 
echo "Exit status of the process with pid: $myPid is $status" 
संबंधित मुद्दे