क्या उपयोग संदेश stderr या stdout में जाना चाहिए?


29

उपयोग संदेश जो उदाहरण के साथ मुद्रित किया जाना चाहिए

 command -?

यूनिक्स कमांड में से एक को stderr या stdout जाना है, और क्यों? यदि उपयोगकर्ता किसी विकल्प के साथ कोई गलती करता है तो क्या उसे उसी स्थान पर जाना चाहिए?


4
अतिरिक्त नोट: उपयोग नहीं करते -? उपयोग --help और -h क्योंकि --help और -h मानक हैं और क्योंकि -? खोल द्वारा व्याख्या की जा सकती है।
ctrl-alt-delor

1
@richard यह एक उत्कृष्ट बिंदु है। फन ट्रिक (बाश में): touch -- -l; ls -?- आपको वास्तव में एक लंबी सूची मिलती है जैसे कि आप -lls को पास कर देते हैं।
12

@richard। जब आप यह नहीं जानते कि कमांड जीएनयू-शैली के लंबे विकल्पों को स्वीकार करता है या -hमदद संदेश के अलावा किसी अन्य चीज के लिए विकल्प का समर्थन कर सकता है , तब '-?'(उद्धरण के साथ) या -:आपको एक त्रुटि (और उपयोग) संदेश प्राप्त करने का एक अच्छा मौका देता है :और ?किसी भी चीज़ के उपयोग के लिए वैध विकल्प नहीं हो सकते getopt(3)
स्टीफन चेज़लस

@ स्टेफेन चेज़लस यदि मैं आपकी टिप्पणी को सही ढंग से समझता हूं, तो आप किसी प्रोग्राम के उपयोगकर्ता के दृष्टिकोण से लिख रहे हैं, यह प्रश्न मुझे लगता है कि प्रोग्राम लिखने वाले किसी व्यक्ति के दृष्टिकोण से है।
सीटीएल-अल्ट-डेलोर

जवाबों:


50

यह stdout में जाना चाहिए, ताकि आप टाइप कर सकें:

command --help | less

यह भी पर Gnu कोडिंग मानकों--help द्वारा अनुशंसित है ।

दूसरी ओर, एक अमान्य विकल्प का उपयोग करने पर या एक आवश्यक तर्क को छोड़ देने पर आपको जो उपयोग संदेश मिलता है, उसे stderr पर जाना चाहिए, क्योंकि यह एक त्रुटि संदेश है, और आप इसे पाइपलाइन में अगले कमांड में फीड नहीं करना चाहते हैं।

जब आप उपयोग करते हैं --help, तो उपयोग संदेश कमांड का सामान्य और अपेक्षित आउटपुट होता है। इसलिए, यह stdout में जाता है, इसलिए इसे किसी अन्य कमांड, जैसे lessया के लिए पाइप किया जा सकता है grep

जब आप कहते हैं command --bogus-option | other-command, आप नहीं चाहते कि उपयोग संदेश स्टडआउट हो जाए, क्योंकि यह अब अप्रत्याशित उत्पादन है जिसे संसाधित नहीं किया जाना चाहिए other-command। इसके अलावा, यदि आउटपुट --helpकुछ मुट्ठी भर लाइनों से अधिक है, तो उपयोग त्रुटि संदेश में केवल --helpआउटपुट का सारांश होना चाहिए , और --helpअतिरिक्त विवरण के लिए उपयोगकर्ता को संदर्भित करना चाहिए ।


1
यह थोड़ा भ्रामक है कि एक ही संदेश के लिए दो अलग-अलग आउटपुट स्ट्रीम हैं जो किसी चीज़ पर निर्भर नहीं है?

7
शायद, लेकिन वे जरूरी नहीं कि एक ही संदेश हो। यदि आउटपुट --helpकुछ लाइनों से अधिक है, तो एक अमान्य विकल्प द्वारा निर्मित उपयोग संदेश --helpपूरी जानकारी देखने के लिए उपयोग करने के लिए कहे जाने वाले संक्षिप्त सारांश मात्र होना चाहिए ।
cjm

4
+1 - यह 100% सही है, और मुझे यहाँ असहमति के लिए कोई जगह नहीं दिखती।
सिमोन
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.