जैसा कि दूसरों ने कहा है, linux दो अलग-अलग आउटपुट स्ट्रीम प्रदान करता है:
स्टडआउट , या "मानक आउटपुट" वह जगह है जहां सभी नियमित आउटपुट जाते हैं।
आप इसे फ़ाइल डिस्क्रिप्टर का उपयोग करके संदर्भित कर सकते हैं 1
।
stderr , या "मानक त्रुटि" आउट-ऑफ-बैंड जानकारी के लिए एक अलग स्ट्रीम है।
आप इसे फ़ाइल डिस्क्रिप्टर का उपयोग करके संदर्भित कर सकते हैं 2
।
दो अलग-अलग आउटपुट स्ट्रीम क्यों? काल्पनिक आदेशों की एक पाइपलाइन पर विचार करें:
decrypt $MY_FILE | grep "secret" | sort > secrets.txt
अब कल्पना करें कि decrypt
कमांड विफल रहता है और एक त्रुटि संदेश उत्पन्न करता है। यदि यह उस संदेश को भेजता है stdout
, तो यह पाइप में भेज देगा, और जब तक कि यह "गुप्त" शब्द नहीं था, तब तक आप इसे कभी नहीं देखेंगे। तो आप एक खाली आउटपुट फ़ाइल के साथ समाप्त हो जाएंगे, बिना किसी विचार के।
हालांकि, चूंकि पाइप केवल कब्जा करता है stdout
, decrypt
कमांड अपनी त्रुटियों को भेज सकता है stderr
, जहां वे कंसोल पर प्रदर्शित होंगे।
आप अनुप्रेषित कर सकते हैं stdout
और stderr
, या तो एक साथ या स्वतंत्र:
# Send errors to "errors.txt" and output to "secrets.txt"
# The following two lines are equivalent, as ">" means "1>"
decrypt $MY_FILE 2> errors.txt > secrets.txt
decrypt $MY_FILE 2> errors.txt 1> secrets.txt
आप त्रुटियों को पुनर्निर्देशित कर सकते हैं stdout
और उन्हें संसाधित कर सकते हैं जैसे कि वे सामान्य आउटपुट थे:
# The operation "2>&1" means "redirect file descriptor 2 to file
# descriptor 1. So this sends all output from stderr to stdout.
# Note that the order of redirection is important.
decrypt $MY_FILE > errors.txt 2>&1
# This may be confusing. It will store the normal output in a file
# and send error messages to stdout, where they'll be captured by
# the pipe and then sorted.
decrypt $MY_FILE 2>&1 > output.txt | sort
आप एक "शॉर्टहैंड" नोटेशन का उपयोग एक ही फाइल पर stdout और stderr दोनों को पुनर्निर्देशित करने के लिए कर सकते हैं:
decrypt $MY_FILE &> output.txt
और, आखिरकार, >
ऑपरेटर इसे लिखने से पहले अपनी आउटपुट फ़ाइल को पहले काट देगा। यदि, इसके बजाय, आप किसी मौजूदा फ़ाइल में डेटा जोड़ना चाहते हैं , तो >>
ऑपरेटर का उपयोग करें :
decrypt $MY_FILE 2>> more_errors.txt >> more_secrets.txt
decrypt $MY_FILE >> more_output.txt 2>&1