"</ Dev / null" का क्या अर्थ है?


16

मैं > /dev/nullउन चीजों को पुनर्निर्देशित /dev/nullकरता हूं जो ब्लैकहोल की तरह काम करती हैं। हालाँकि, मुझे समझ नहीं आ रहा है कि < /dev/nullइसका क्या मतलब है। मैंने कुछ स्क्रिप्ट को इस तरह लिखा है:

nohup myprogram > foo.out 2> foo.err < /dev/null &

तो, < /dev/nullऊपर दिए गए कोड में क्या मतलब है?

यहाँ एक उदाहरण है जहाँ यह सुझाव दिया गया है


जवाबों:


19

यह सुनिश्चित करता है कि सभी I / O स्ट्रीम का हिसाब / कब्ज़ा है।

इस तरह, पृष्ठभूमि की प्रक्रिया में टर्मिनल के लिए "बंधे" कुछ भी नहीं है, ताकि आप अपने व्यवसाय के बारे में अपने कार्यक्रम के बिना टीटीवाई से पढ़ने की कोशिश कर सकें, जिससे टर्मिनल लटका होगा।

इस मामले में, चूंकि आप शेल स्क्रिप्ट से ssh पर प्रक्रिया शुरू कर रहे हैं, यह सुनिश्चित कर रहा है कि स्क्रिप्ट अनएन्कर्ड के साथ आगे बढ़ सकती है।


क्या यह मान लें कि मायप्रोग्राम कुछ इनपुट लेता है, लेकिन इस मामले में यह मायप्रोग्राम को इनपुट के रूप में कुछ भी नहीं खिलाता है?
कियान चेन

धन्यवाद। मुझे छोड़कर बाकी सब समझ में आता है < /dev/null
कियान चेन

तो बिना कोड और समान कोड के बीच अंतर क्या है < /dev/null?
कियान चेन

मैं वास्तव में यहाँ से कोड को पढ़ता हूं: stackoverflow.com/questions/29142/…
Qian Chen

2
खुशी हुई कि इससे मदद मिली! पलायन के बारे में खेद है; संदर्भ में मदद की, धन्यवाद! - ध्यान दें: मैं एक या दो मिनट में अपनी टिप्पणियों का एक समूह हटाने जा रहा हूं, अब जब चीजें
समाप्त

12

program </dev/nullइसका मतलब यह है कि programफ़ाइल डिस्क्रिप्टर 0 यानी एसटीडीआईएन के माध्यम से अपने इनपुट तर्क को ले जा सकता है (एक विकल्प के लिए इनपुट पैरामीटर हो सकता है या उस पर काम करने के लिए इनपुट फ़ाइल हो सकती है) /dev/null

जैसा कि आप पहले से ही जानते हैं, /dev/nullइसमें कुछ भी नहीं है, यह EOF (फ़ाइल का अंत) को सूचित करेगा, इसलिए किसी भी कार्यक्रम को इनपुट से लेने पर /dev/nullमूल रूप से इसके इनपुट तर्क के रूप में कुछ भी पुनर्निर्देशित नहीं होगा।


तो क्या सिर्फ < /dev/nullबाहर छोड़ने के लिए कोई अंतर है? इसे बस इस रूप में लिखेंnohup myprogram > foo.out 2> foo.err &
कियान चेन

1
@ElgsQianChen जो आपके पर निर्भर करता है program करता है वह क्या STDIN के रूप में चाहता है? कुछ प्रोग्राम इसे अनिवार्य कर सकते हैं, इसलिए आपको STDIN के रूप में कुछ डालने की आवश्यकता है, यह मामला यहाँ हो सकता है कि आपने अभी /dev/nullSTDIN के रूप में उपयोग किया है और प्रोग्राम को प्रोसेसिंग करने दें और बताए गए फाइलों में STDOUT और STDERR डाल दें ..
heayayl

तो क्या यह किसी भी इनपुट को प्रक्रिया को अवरुद्ध करने से प्रभावी रूप से रोकता है, और बस किसी भी इनपुट अनुरोध को कुछ नहीं खिलाता है?
कियान चेन

1
@ElgsQianChen यह फ़ाइल डिस्क्रिप्टर 0 को अवरुद्ध कर देगा अर्थात STDIN ताकि आप इसके माध्यम से कोई और इनपुट न दे सकें। यदि इनपुट लेने के लिए कोई अन्य FD कॉन्फ़िगर नहीं किया गया है तो आप प्रोग्राम को कोई और इनपुट नहीं दे पाएंगे।
heemayl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.