जवाबों:
पृष्ठभूमि के लिए:
पहले इन के फंक्शन को निपटाते हैं। संदर्भ के लिए उन्नत बैश-स्क्रिप्टिंग गाइड देखें ।
2>&-
इस एक का सामान्य रूप है M>&-
, जहां "एम" एक फाइल डिस्क्रिप्टर नंबर है। यह फाइल डिस्क्रिप्टर के लिए आउटपुट को बंद कर देगा, जिसका संदर्भ "एम" है ।
2>/dev/null
इस एक का सामान्य रूप है M>/dev/null
, जहां "एम" एक फाइल डिस्क्रिप्टर नंबर है। यह फ़ाइल डिस्क्रिप्टर, "M" , को रीडायरेक्ट करेगा /dev/null
।
2>&1
इस एक का सामान्य रूप है M>&N
, जहां "एम" और "एन" फ़ाइल डिस्क्रिप्टर नंबर हैं। यह फाइल डिस्क्रिप्टर "M" और "N" के आउटपुट को एक ही स्ट्रीम में जोड़ती है ।
|&
यह केवल एक संक्षिप्त नाम है 2>&1 |
। इसे बैश 4 में जोड़ा गया था।
&>/dev/null
यह केवल एक संक्षिप्त नाम है >/dev/null 2>&1
। यह फाइल डिस्क्रिप्टर 2 (STDERR) और डिस्क्रिप्टर 1 (STDOUT) को रीडायरेक्ट करता है /dev/null
।
>/dev/null
यह केवल एक संक्षिप्त नाम है 1>/dev/null
। यह फ़ाइल डिस्क्रिप्टर 1 (STDOUT) को रीडायरेक्ट करता है /dev/null
।
मैं के बाहर अन्य गोले के साथ ज्यादा नहीं निपटा गया है csh
और tcsh
। बैश के पुनर्निर्देशन ऑपरेटरों की तुलना में उन 2 के साथ मेरा अनुभव यह है कि इस संबंध में बैश बेहतर है। देखें tcsh आदमी पेज अधिक जानकारी के लिए।
आपके द्वारा किसी के बारे में पूछे गए आदेशों को सीधे csh / tcsh द्वारा समर्थित नहीं किया जाता है। समान कार्यों के निर्माण के लिए आपको अलग-अलग सिंटैक्स का उपयोग करना होगा।
2>&-
बनाम के साथ ऐसा कुछ नहीं है 2>/dev/null
(इसके अलावा कुछ "खराब" लिखित प्रोग्राम 2>&-
सही ढंग से अप्रतिबंधित नहीं हैं)?
&>
bash
शुरुआत से था (और बॉर्न और पोसिक्स संगतता को तोड़ता है क्योंकि इसका मतलब वहां कुछ अलग है, हालांकि हिट होने की संभावना नहीं है)। >&
और |&
से आते हैं (t)csh
(और यह stderr रीडायरेक्ट करने के लिए उनके लिए एक ही रास्ता है)। वे zsh
शुरू से थे और हाल ही में ही जोड़े गए हैं bash
। rc
बेहतर डिज़ाइन किए गए ऑपरेटरों के लिए भी देखें ।
(+2-2=0)
। अब, संस्करण भाग में, मैं बहुत कुछ संपादित नहीं करता हूं, लेकिन इस मामले में मैं करूंगा, क्योंकि यह स्पष्ट करता है कि ऑपरेशन के बाद का डेटा होगा N
। मैंने पढ़ा है कि आप इसके माध्यम से उत्तर देते हैं, और यह सभी पहलुओं में बहुत ठीक है। बस इस छोटी सी अस्पष्टता ने मुझे सोच लिया, यही कारण है कि संस्करण। लेकिन ठीक है, फिर से जोड़ने या अस्वीकार करने के लिए स्वतंत्र महसूस करें, जैसा कि आप करेंगे। मुझे उम्मीद है कि मैं बात समझा सकता हूं। अच्छा काम करते रहें।
यह STDERR और STDOUT को पुनर्निर्देशित करने के लिए है:
2>/dev/null
STDERR को / dev / null पर पुनर्निर्देशित करें (कंसोल पर दिखाने से रोकें)
|&
अनुप्रेषित STDERR और STDIN से पाइप्ड कमांड (cmd1 | & cmd2)
&>/dev/null
STDERR और STDOUT दोनों को / dev / null पर पुनर्निर्देशित करें (कंसोल पर कुछ भी नहीं दिखा)
>/dev/null
अनुप्रेषित STDOUT / dev / null (कंसोल पर केवल STDERR शो)
2>&-
पुनर्निर्देशन के साथ उपयोग किए जाने वाले फ़ाइल डिस्क्रिप्टर को बंद करने के लिए है
बॉर्न गोले के लिए ये सभी मानक पुनर्निर्देशन विधियां हैं।
|&
और पोर्टेबल नहीं&>/dev/null
हैं ।
चयनित उत्तर के लिए इस पर विचार करें। आप जानना चाह सकते हैं कि कौन से फॉर्म POSIX हैं और कौन से नहीं हैं।
दो POSIX फॉर्म शामिल हैं:
2.7.2 पुनर्निर्देशन आउटपुट
रीडायरेक्ट आउटपुट के लिए दो सामान्य प्रारूप हैं:
[N]> शब्द
[N]> | शब्द
जहाँ वैकल्पिक n फ़ाइल डिस्क्रिप्टर संख्या का प्रतिनिधित्व करता है। यदि संख्या छोड़ दी जाती है, तो पुनर्निर्देशन मानक आउटपुट (फ़ाइल विवरण 1) का संदर्भ देगा।
'>' प्रारूप का उपयोग करके आउटपुट पुनर्निर्देशन विफल हो जाएगा यदि नोकलोबर विकल्प सेट किया गया है (सेट -C का विवरण देखें) और शब्द के विस्तार द्वारा नामित फ़ाइल मौजूद है और एक नियमित फ़ाइल है। अन्यथा, '>' या "> |" प्रारूप फ़ाइल का नाम देगा जिसका नाम शब्द के विस्तार से उत्पन्न होता है और निर्दिष्ट फ़ाइल विवरणक, या मानक आउटपुट पर आउटपुट के लिए खोला जाता है यदि कोई भी निर्दिष्ट नहीं है। यदि फ़ाइल मौजूद नहीं है, तो इसे बनाया जाएगा; अन्यथा, इसे खोले जाने के बाद एक खाली फ़ाइल होने के लिए छोटा कर दिया जाएगा।
-
2.7.6 डुप्लिकेटिंग आउटपुट फ़ाइल डिस्क्रिप्टर
पुनर्निर्देशन ऑपरेटर:
[N]> और शब्द
एक आउटपुट फ़ाइल डिस्क्रिप्टर को दूसरे से डुप्लिकेट करेगा, या एक को बंद करेगा। यदि शब्द एक या अधिक अंकों का मूल्यांकन करता है, तो n, या मानक आउटपुट द्वारा निर्दिष्ट फाइल डिस्क्रिप्टर यदि n निर्दिष्ट नहीं है, तो शब्द द्वारा निरूपित फाइल डिस्क्रिप्टर की एक प्रति बनाई जाएगी; यदि शब्द में अंक आउटपुट के लिए पहले से खुले एक फाइल डिस्क्रिप्टर का प्रतिनिधित्व नहीं करते हैं, तो एक पुनर्निर्देशन त्रुटि का परिणाम होगा; शेल त्रुटियों के परिणाम देखें। यदि शब्द '-' का मूल्यांकन करता है, तो फ़ाइल डिस्क्रिप्टर n या मानक आउटपुट यदि n निर्दिष्ट नहीं है, तो बंद है। फ़ाइल डिस्क्रिप्टर को खोलने का प्रयास जो खुला नहीं है, उसमें त्रुटि नहीं होगी। यदि शब्द किसी और चीज़ का मूल्यांकन करता है, तो व्यवहार अनिर्दिष्ट है।
इसलिए:
Function POSIX-compat POSIX
2>&- Yes close
2>/dev/null Yes redir
2>&1 Yes dup
|& No
&>/dev/null No
>/dev/null Yes redir
>&/dev/null ? ?dup
अंतिम पंक्ति मूल प्रश्न में नहीं है, लेकिन यह बिना किसी शिकायत के काम करती है। (साथ ही / dev / null के लिए प्रतिस्थापित / dev / tty के साथ काम करता है)।
&>
GNU बैश कम्पैटिबिलिटी के लिए mksh सपोर्ट करता है , इसे जोरदार तरीके से इस्तेमाल न करने के लिए प्रोत्साहित किया जाता है, क्योंकि इसे पार्स करने से मौजूदा POSIX स्क्रिप्ट के शब्दार्थ टूट सकते हैं, और mksh इसे POSIX मोड में पहले ही निष्क्रिय कर देता है।