यह स्वैपिंग है stdout
और stderr
।
>name
फ़ाइल में रीडायरेक्ट आउटपुट का मतलब है name
।
>&number
डिस्क्रिप्टर फाइल करने के लिए रीडायरेक्ट आउटपुट का मतलब है number
।
इसलिए &
शेल को यह बताने के लिए आवश्यक है कि आपका मतलब फ़ाइल डिस्क्रिप्टर है, न कि फ़ाइल नाम।
एक फाइल डिस्क्रिप्टर एक संख्या है जो पहले से खुली हुई फ़ाइल को संदर्भित करता है। मानक वाले 0
मानक इनपुट के लिए हैं, 1
मानक आउटपुट के लिए या 2
मानक त्रुटि के लिए हैं। आप किसी अन्य नंबर का भी उपयोग कर सकते हैं, जो एक नया फ़ाइल डिस्क्रिप्टर बनाएगा, ठीक उसी तरह जब आप एक नया वेरिएबल बनाते हैं var=value
।
डिफ़ॉल्ट रूप से, दोनों डिस्क्रिप्टर फाइल करते हैं 1
और 2
जाते हैं /dev/tty
, इसलिए यदि आप somecommand 3>&1 1>&2 2>&3
एक नए शेल में चलते हैं , तो यह कुछ भी नहीं बदलता है (अब आपके पास एक फाइल डिस्क्रिप्टर नंबर 3 है)।
लेकिन अगर स्क्रिप्ट में पहले कहीं यह निष्पादन (जैसे exec 2>error.log
) का उपयोग करके पुनर्निर्देशन करता है , या स्क्रिप्ट को कमांड लाइन के साथ चलाया जाता है, जिसमें पुनर्निर्देशन (जैसे ./thescript 2>error.log
) शामिल है, तो स्वैपिंग स्टैडआउट और स्टेडर कुछ करेगा।
आपके विशिष्ट मामले में, कमांड जो उसके स्टडआउट और स्टैडर स्वैप की गई है dialog
। इसके मैन पेज को देखते हुए, मैं देखता हूं
Some widgets, e.g., checklist, will write text to dialog's output.
Normally that is the standard error
इसलिए शायद वह व्यक्ति जिसने स्क्रिप्ट लिखी है वह किसी कारण के बजाय dialog
आउटपुट जाना चाहता है ।stdout
stderr
पुनर्निर्देशन का आदेश भी देखें