यह स्वैपिंग है 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आउटपुट जाना चाहता है ।stdoutstderr
पुनर्निर्देशन का आदेश भी देखें