मैं आम तौर पर बातें करने के बॉर्न-फिर शेल के तरीके का पालन करने की सलाह दूंगा , क्योंकि बैश यकीनन वहां सबसे लोकप्रिय यूनिक्स शेल है। बैश आमतौर पर या तो उपयोग करता है&>
या या 2>&1
। IMHO, न तो "सही" है, इसलिए मैं उस बकवास के बारे में भूलने की सलाह देता हूं। वास्तविक रूप से, जो आपको उपयोग करना चाहिए वह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।
2>&1
stderout के साथ stderr को मिलाता है, जो उपयोगी हो सकता है, उदाहरण के लिए, आप stderr पाठ को पाइप करना चाहते हैं। इसलिए, उदाहरण के लिए, यदि आप यह देखना चाहते हैं कि क्या कोई प्रोग्राम एक निश्चित स्टैडर मैसेज को प्रिंट करता है, लेकिन आपकी स्क्रीन को महत्वहीन कचरा से भरा नहीं है, तो आप ऐसा कुछ कर सकते हैंprogram 2>&1 | grep crashed
, जो प्रोग्राम से stdout और strr को खोजेगा। "दुर्घटनाग्रस्त" शब्द के लिए "प्रोग्राम" कहा जाता है।
दूसरी ओर, यदि आप किसी भी चीज़ को प्रिंट करने के लिए कोई प्रोग्राम नहीं चाहते हैं, तो आप बस चला सकते हैं program &> /dev/null
, जो stderr और stdout दोनों को / dev / null में रीडायरेक्ट करेगा, एक विशेष फ़ाइल जो जादुई रूप से चीजों को गायब कर देती है। या, यदि आप किसी प्रोग्राम के आउटपुट (शायद बग या किसी चीज़ की रिपोर्ट करना चाहते हैं) को सेव करना चाहते हैं, तो आप एक फाइल में stderr और stdout दोनों को रीडायरेक्ट कर सकते हैं: program &> log.txt
सभी डेटा को "log.txt" नामक फाइल पर रीडायरेक्ट करेंगे। यदि आप चाहते हैं, तो आप stdout और stderr को पुनर्निर्देशित कर सकते हैं program 2> log.txt > log.txt
या program 2>&1 | cat > log.txt
दोनों का उपयोग करने के समान प्रभाव होगा &>
। यदि आप कुछ ऐसा करते हैं program 2>&1 > file
, तो केवल stdout को पुनर्निर्देशित किया जाएगा, लेकिन stderr को अभी भी किसी अन्य प्रोग्राम, जैसे कि कैट, में पाइप किया जा सकता है, जिसे ऊपर दिखाए अनुसार पुनर्निर्देशित किया जा सकता है। हालाँकि, टाइपिंग&>
उपरोक्त में से किसी भी उदाहरण से आसान है, क्योंकि इसमें कम अक्षर टाइप करना शामिल है (और यह मनुष्य के लिए पढ़ना आसान है)। ध्यान दें कि program 2> log.txt > log.txt
गैर-बैश के गोले पर काम करने की अधिक संभावना हो सकती है।
पुनश्च: यदि आप अन्य गोले का उपयोग करने वाले लोगों के बारे में चिंतित हैं, तो कुछ ऐसी चीज है जिसे आप अपनी स्क्रिप्ट की पहली पंक्ति में जोड़ सकते हैं जिसे "मैजिक नंबर", या "शेबंग" कहा जाता है। यह अनिवार्य रूप से अन्य कंप्यूटरों को सुनिश्चित करने का एक तरीका है (विशेषकर यूनिक्स जैसे ऑपरेटिंग सिस्टम चलाने वाले) जानते हैं कि किसी स्क्रिप्ट को निष्पादित करने के लिए कौन से प्रोग्राम का उपयोग करना है। अलग-अलग लिपियाँ अलग-अलग शेबंग का उपयोग करती हैं। बैश स्क्रिप्ट के लिए एक शेबंग इस तरह दिखता है:
#!/bin/bash
यदि आप किसी दिए गए स्क्रिप्ट की पहली पंक्ति के रूप में उपरोक्त का उपयोग करते हैं, तो आम तौर पर कहा स्क्रिप्ट को निष्पादित करने के लिए बैश का उपयोग किया जाएगा। यह गलत शेल के साथ किसी को गलती से स्क्रिप्ट निष्पादित करने के लिए बहुत अधिक कठिन बना देगा।
पुनश्च: मैं झूठ नहीं बोलने जा रहा हूं: अब तक, मुझे नहीं पता था कि कोई भी उपयोग कर सकता है >&
, लेकिन, जहां तक बाश जाता है, वह ऐसा ही करता है &>
। आप हर दिन कुछ नया सीखते हैं।