फ़ंक्शन लौटता है, लेकिन कमांड प्रतिस्थापन ब्लॉक, क्योंकि आपने पृष्ठभूमि नौकरी बनाई है, लेकिन आपके पास अभी भी अपना स्टडआउट एफडी खुला है। बस के आगे जोड़कर इसे बंद >/dev/nullकरें &।
#!/bin/bash
function start {
leafpad >/dev/null &
echo $!
}
PID=$(start)
echo "PID is $PID"
यदि आप चाहते हैं कि आपकी प्रक्रिया में भी गतिरोध, गतिरोध, स्टैडर बंद हो, तो इसका उपयोग करें:
leafpad >/dev/null 0>&1 2>&1 &
यह stdin (0), stdout (1), और stderr (2), फिर बैकग्राउंड (&) को बंद करेगा। इसके अलावा, जब इन धाराओं का उपयोग करते हुए पुनर्निर्देशन भूल जाते हैं कि वे "धोखा" नहीं देते हैं, तो इसका अर्थ है कि निष्पादन के क्रम में नकल की गई है।
1>/dev/null 2>&1
तथा
2>&1 1>/dev/null
वह सामान नहीं है ! पूर्व में, आप एक स्ट्रीम को / dev / null (जो आप चाहते हैं) में दोहरा रहे हैं, बाद में, आप stderr को / devd / stdout को डुप्लिकेट कर रहे हैं, और फिर, stdout को बंद कर रहे हैं। इसलिए भेजा गया कोई भी संदेश stderrआपके कंसोल में दिखाई देगा।