पृष्ठभूमि प्रक्रिया शुरू करते समय शेल प्रक्रिया की जानकारी कैसे छिपाई जाए?


19
[USER@SERVER ~] sleep 3 &
[1] 5232
[USER@SERVER ~] 
[1]+  Done                    sleep 3
[USER@SERVER ~] 

मैं इन दो संदेशों को कैसे / देव / शून्य करूँ? "

[1] 5232
[1]+  Done                    sleep 3

ps: तो मुझे प्रक्रिया के आउटपुट की आवश्यकता है, लेकिन उल्लेखित दो पंक्तियों का नहीं!


आप केवल उन पंक्तियों को प्राप्त करते हैं जब आप इसे अंतःक्रियात्मक रूप से चलाते हैं। उदाहरण के लिए, यदि आप इसे स्क्रिप्ट से चलाते हैं तो आप नहीं करते।
व्युत्पन्न

जवाबों:


24

यह प्रोग्राम आउटपुट नहीं है, यह कुछ उपयोगी शेल जानकारी है।

वैसे भी, उन सबस्क्रिप्शन और आउटपुट पुनर्निर्देशन का उपयोग करके चंगा किया जा सकता है

( sleep 3 & ) > /dev/null 2>&1

2
"2> / देव / अशक्त" अच्छी बात है, मुझे इस प्रक्रिया से आउटपुट की आवश्यकता है
लांसबैन्स

@LanceBaynes यह प्रक्रिया stderr पर कुछ लिख सकती है।
क्रिस डाउन

2
यह दुर्भाग्यपूर्ण है कि यह $ के साथ पिड की पुनर्प्राप्ति को हरा देता है!
डेलेप्ले

3

बैश या ज़श में, आप disown %1शेल को नौकरी के बारे में भूलने के लिए कह सकते हैं । तब शेल उस नौकरी के बारे में कोई भी संदेश नहीं छापेगा, और न ही इसे तब चलाएगा जब आप इसे चलाएंगे jobsया कभी भी इसे भेजेंगे। Zsh में, इसके &!बजाय काम शुरू करना तुरंत उस पर &कॉल करने के बराबर है disown


1

@Gilles पर टिप्पणी (अभी तक) नहीं कर सकते, लेकिन ऐसा लगता है कि & disownयह भी काम करता है:

sleep 3 & disown

यह बैश v.4.1.2 में काम करने के लिए प्रतीत नहीं होता है
Alexej मगुरा

1

प्रयत्न:

user@host:~$ read < <( sleep 10 & echo $! )
user@host:~$ echo $REPLY
28677

और आपने आउटपुट और PID दोनों को छिपाया है । ध्यान दें कि आप अभी भी $ REPLY से PID को पुनः प्राप्त कर सकते हैं

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.