मुझे कमांड (उपयोगिता और वापसी कोड) की सूची कैसे मिलती है और कमांड / उपयोगिता के लिए अर्थ क्या है?


17

क्या कोई तरीका है जो मैं टर्मिनल कमांड से शीर्षक में बता सकता हूं, या क्या मुझे कोड देखना होगा?

जवाबों:


15

किसी दिए गए टर्मिनल कमांड के निकास की स्थिति का अर्थ प्राप्त करने के लिए कोई "नुस्खा" नहीं है।

मेरा पहला प्रयास होगा पेज:

user@host:~# man ls 
   Exit status:
       0      if OK,

       1      if minor problems (e.g., cannot access subdirectory),

       2      if serious trouble (e.g., cannot access command-line argument).

दूसरा : Google । देखें wget एक उदाहरण के रूप।

तीसरा : शेल की निकास स्थिति, उदाहरण के लिए बैश। बैश और यह बिलिन विशेष रूप से 125 से ऊपर के मूल्यों का उपयोग कर सकते हैं। कमांड के लिए 127 नहीं मिला, कमांड के लिए 126 निष्पादन योग्य नहीं है। अधिक जानकारी के लिए बैश निकास कोड देखें


हाँ कुछ आदमी, जानकारी, ... पेज उन्हें शामिल करते हैं .. और मैं उन लोगों के साथ संबंध था जो नहीं थे। ..और मुझे पता है कि एक वेब शोध हमेशा एक विकल्प होता है। .. अभी के लिए यह प्रतीत होता है कि यह सिर्फ बैश एग्जिट कोड था जिसकी मुझे तलाश थी ..
सटीक

12

बाहर निकलें कोड एक प्रोग्राम को समाप्त करते समय विफलता की स्थिति को इंगित करते हैं और वे 0 और 255 के बीच आते हैं। शेल और इसके बिल्डिंस विशिष्ट विफलता मोड को इंगित करने के लिए 125 से ऊपर के मानों का विशेष रूप से उपयोग कर सकते हैं, इसलिए कोड की सूची शेल और ऑपरेटिंग सिस्टम (जैसे बैश) के बीच भिन्न हो सकती है मूल्य + 128 + N का उपयोग निकास स्थिति के रूप में करता है)। देखें: बैश - 3.7.5 स्थिति से बाहर निकलें या man bash

सामान्य तौर पर एक शून्य निकास स्थिति इंगित करती है कि एक कमांड सफल हुआ , एक गैर-शून्य निकास स्थिति विफलता का संकेत देती है ।

यह जांचने के लिए कि कौन सा त्रुटि कोड कमांड द्वारा लौटाया गया है, आप $?अंतिम निकास कोड के लिए प्रिंट कर सकते हैं या ${PIPESTATUS[@]}जो शेल स्क्रिप्ट से बाहर निकलने के बाद पाइपलाइन (बैश में) से निकास स्थिति मानों की एक सूची देता है।

सभी एक्ज़िट कोड्स की पूरी सूची नहीं है, जो मिल सकते हैं, हालाँकि कर्नेल स्रोत में एक्ज़िट स्टेटस नंबरों को व्यवस्थित करने की कोशिश की गई है, लेकिन यह C / C ++ प्रोग्रामर के लिए मुख्य है और स्क्रिप्टिंग के लिए समान मानक उपयुक्त हो सकते हैं।

कार्यक्रमों और (64-78) के लिए बेहतर निकास कोड के साथ लिनक्स और बीएसडी / ओएस एक्स दोनों पर सहक्रियाओं की कुछ सूची /usr/include/sysexits.h(या: man sysexitsबीएसडी पर) में पाई जा सकती है :

0   /* successful termination */
64  /* base value for error messages */
64  /* command line usage error */
65  /* data format error */
66  /* cannot open input */
67  /* addressee unknown */
68  /* host name unknown */
69  /* service unavailable */
70  /* internal software error */
71  /* system error (e.g., can't fork) */
72  /* critical OS file missing */
73  /* can't create (user) output file */
74  /* input/output error */
75  /* temp failure; user is invited to retry */
76  /* remote error in protocol */
77  /* permission denied */
78  /* configuration error */
/* maximum listed value */

उपरोक्त सूची 64-78 से पहले अप्रयुक्त निकास कोड आवंटित करती है। अनलॉफ़्ट किए गए निकास कोड की सीमा भविष्य में और प्रतिबंधित हो जाएगी।

हालांकि उपरोक्त मान मुख्य रूप से सेंडमेल में उपयोग किए जाते हैं और बहुत अधिक किसी और के द्वारा उपयोग किए जाते हैं, इसलिए वे दूरस्थ रूप से मानक के करीब कुछ भी नहीं हैं (जैसा कि @Gilles द्वारा बताया गया है )।

शेल में निकास स्थिति निम्नानुसार है (बैश पर आधारित):

  • 1- 125- कमांड सफलतापूर्वक पूरा नहीं हुआ। स्थिति के अर्थ के लिए कमांड के मैन पेज की जाँच करें, नीचे कुछ उदाहरण हैं:

  • 1 - सामान्य त्रुटियों के लिए कैटचेल

    विविध त्रुटियां, जैसे "शून्य से विभाजित" और अन्य अभेद्य संचालन।

    उदाहरण:

    $ let "var1 = 1/0"; echo $?
    -bash: let: var1 = 1/0: division by 0 (error token is "0")
    1
    
  • 2 - शेल बिल्डरों का दुरुपयोग (बैश प्रलेखन के अनुसार)

    मिसिंग कीवर्ड या कमांड, या अनुमति समस्या (और एक असफल बाइनरी फ़ाइल तुलना पर रिटर्न कोड को अलग करें)।

    उदाहरण:

     empty_function() {}
    
  • 6 - ऐसा कोई उपकरण या पता नहीं

    उदाहरण:

    $ curl foo; echo $?
    curl: (6) Could not resolve host: foo
    6
    
  • 124 - कमांड बार

  • 125- यदि कोई कमांड खुद ही विफल हो जाती है : कोर्यूटिल्स
  • 126 - यदि कमांड मिली है, लेकिन उसे लागू नहीं किया जा सकता है (जैसे निष्पादन योग्य नहीं है)

    अनुमति की समस्या या आदेश एक निष्पादन योग्य नहीं है।

    उदाहरण:

    $ /dev/null
    $ /etc/hosts; echo $?
    -bash: /etc/hosts: Permission denied
    126
    
  • 127 - यदि कोई आदेश नहीं मिल सकता है, तो इसे निष्पादित करने के लिए बनाई गई बच्चे की प्रक्रिया उस स्थिति को लौटाती है

    $PATHटाइपो या के साथ संभावित समस्या ।

    उदाहरण:

    $ foo; echo $?
    -bash: foo: command not found
    127
    
  • 128 - के लिए अवैध तर्क exit

    बाहर निकलने के लिए 0 - 255 की सीमा में केवल पूर्णांक होता है।

    उदाहरण:

    $ exit 3.14159
    -bash: exit: 3.14159: numeric argument required
    
  • 128- 254- घातक त्रुटि संकेत "एन" - एक संकेत प्राप्त करने के कारण कमांड की मृत्यु हो गई। स्थिति प्राप्त करने के लिए सिग्नल कोड 128 (128 + SIGNAL) में जोड़ा जाता है (लिनक्स:, man 7 signalबीएसडी:) man signal, नीचे कुछ उदाहरण हैं:

  • 130 Ctrl-C दबाए जाने के कारण समाप्त आदेश, 130-128 = 2 (SIGINT)

    उदाहरण:

    $ cat
    ^C
    $ echo $?
    130
    
  • 137- यदि कमांड को KILL(9)सिग्नल (128 + 9) भेजा जाता है, तो कमांड की निकास स्थिति अन्यथा

    kill -9 $PPID स्क्रिप्ट का।

  • 141- SIGPIPE- बिना पाठक के साथ एक पाइप पर लिखें

    उदाहरण:

    $ hexdump -n100000 /dev/urandom | tee &>/dev/null >(cat > file1.txt) >(cat > file2.txt) >(cat > file3.txt) >(cat > file4.txt) >(cat > file5.txt)
    $ find . -name '*.txt' -print0 | xargs -r0 cat | tee &>/dev/null >(head /dev/stdin > head.out) >(tail /dev/stdin > tail.out)
    xargs: cat: terminated by signal 13
    $ echo ${PIPESTATUS[@]}
    0 125 141
    
  • 143 - सिग्नल कोड 15 (128 + 15 = 143) द्वारा समाप्त की गई कमांड

    उदाहरण:

    $ sleep 5 && killall sleep &
    [1] 19891
    $ sleep 100; echo $?
    Terminated: 15
    143
    
  • 255* - सीमा से बाहर निकलने की स्थिति।

    बाहर निकलने के लिए 0 - 255 की सीमा में केवल पूर्णांक होता है।

    उदाहरण:

    $ sh -c 'exit 3.14159'; echo $?
    sh: line 0: exit: 3.14159: numeric argument required
    255
    

उपरोक्त तालिका के अनुसार, बाहर निकलने के कोड 1 - 2, 126 - 165, और 255 के विशेष अर्थ हैं, और इसलिए उपयोगकर्ता द्वारा निर्दिष्ट निकास मापदंडों से बचा जाना चाहिए।

कृपया ध्यान दें कि सीमा से बाहर निकलने के मूल्यों के परिणामस्वरूप अनपेक्षित निकास कोड हो सकते हैं (जैसे कि 3809 से बाहर निकलें 225, 3809% 256 (225) का निकास कोड देता है)।

देख:


errnoमान सिस्टम API द्वारा उपयोग किए जाते हैं, वे निकास स्थितियों के रूप में उपयोग नहीं किए जाते हैं (वे सही सीमा में भी नहीं हैं) और वे शेल स्क्रिप्टिंग के लिए अप्रासंगिक हैं। Sysexits मान Sendmail से हैं और बहुत अधिक किसी और के द्वारा उपयोग किया जाता है, वे किसी मानक के करीब कुछ भी नहीं हैं।
गिल्स एसओ- बुराई को रोकें '

7

आपको कोड / प्रलेखन को देखना होगा। हालाँकि जो चीज एक "मानकीकरण" के सबसे करीब आती है, वह है गलत


हेडर फ़ाइल को इंगित करने के लिए धन्यवाद .. कुछ बर्तनों के दस्तावेज़ीकरण में देखने की कोशिश की गई .. कठिन समय बाहर निकलने के कोड खोजने, लगता है कि सबसे अधिक stderrs होगा ...
सटीक

3
errno.hयह अप्रासंगिक है जब यह कोड से बाहर निकलता है, केवल त्रुटि संदेश।
गिल्स एसओ- बुराई को रोकना '

अधिकांश कार्यक्रम बीएसडी सम्मेलन के अनुसार बाहर निकलने के कोड लौटाते हैं, जैसा कि बाहर रखा गया है sysexits.h। हालाँकि, कुछ कार्यक्रम रिटर्न errnoएस करते हैं , और मुझे लगता है कि रिटर्निंग errnoएस सबसे अधिक समझ में आता है। errnoअपवादों की तरह, अनहैन्डेड प्रोपेगेट ऊपर की ओर फैलता है, ( errnoरुके, फ़ंक्शन वापस आते हैं, -1या 0|NULL)। चूँकि प्रोग्राम केवल फ़ंक्शन होते हैं, भले ही फ़ंक्शन एक अलग एड्रेस स्पेस में चलाए जाते हैं, लेकिन यह समझ में आता है कि एक प्रोग्राम errnoप्रक्रिया सीमा के पार प्रचार जारी रखना चाह सकता है ।
PSkocik

@PSkocik, क्या आपके पास इस तरह के कमांड का उदाहरण है? इरानोस पोर्टेबल नहीं हैं (मान पूरे सिस्टम के अनुरूप नहीं हैं), और मूल्य से गलत नाम या संदेश प्राप्त करने का कोई पोर्टेबल तरीका नहीं है (इसके लिए zsh में एक बिल्डिन है)। यह उल्लेख करने के लिए नहीं कि कुछ प्रणालियों में 123 से ऊपर के त्रुटिपूर्ण हैं जो सामान्य विशेष-अर्थ त्रुटि कोड के साथ टकराएंगे । आमतौर पर, कमांड गलत से संदेश प्रिंट करते हैं और एक सफलता / विफलता निकास स्थिति वापस करते हैं। उपयोगकर्ताओं के लिए आदेश दिए गए हैं। फ़ंक्शन / सिस्टम कॉल प्रोग्रामर के लिए अभिप्रेत हैं।
स्टीफन चेजलस

@ स्टीफनचेज़लस मैंने इसे कई बार देखा है, लेकिन किसी भी अच्छी तरह से स्थापित कार्यक्रम में नहीं, मुझे स्वीकार करना होगा। मैं व्यक्तिगत रूप से इरोटिक + 1 को अपने टॉय सिस्टम में हाल ही में लौटा रहा हूं (ताकि 1 का मतलब "किसी भी त्रुटि" से बना रहे) क्योंकि मुझे लगता है कि इरानो की प्रक्रिया सीमा के पार धारावाहिक को बीएसडी सम्मेलन के अनुसार अनुवाद करने से बेहतर समझ में आता है, क्योंकि कार्यक्रम निष्पादित होता है। अनिवार्य रूप से फ़ंक्शन इनवोकेशन, और फ़ंक्शन इरनो का उपयोग करते हैं। मैं अपने PROMPT_COMMAND (bash) में अपने स्वयं के अंतिम-निकास-स्थिति डिकोडर का उपयोग करता हूं, इसलिए मुझे कुछ ऐसा मिलता है "($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
PSkocik

1

जहां तक ​​मुझे पता है, केवल दो, अधिक-या-कम, मानक मान हैं - दोनों stdlib.hको निकास () के साथ उपयोग के लिए परिभाषित किया गया है :

  • EXIT_SUCCESS (= 0)
  • EXIT_FAILURE (= 1)

और दुनिया में सभी कार्यक्रमों के लिए एक ही अर्थ रखने वाले एकमात्र डी-वास्तविक मानक, 0 (शून्य) है जो SUCCESS के लिए है।

अलग-अलग कार्यक्रम विभिन्न त्रुटियों (विभिन्न प्रकार या गंभीरता) को अलग करने या जोर देने के लिए लौटे "विफलता" की अलग-अलग सूची पेश करते हैं। कुछ प्रोग्राम खोजे गए रनटाइम त्रुटियों की पूर्णांक संख्या (उदाहरण के लिए, सूट में विफल इकाई-परीक्षणों की संख्या) की रिपोर्ट करने के लिए दिए गए मान का भी उपयोग करते हैं।

मैं किसी भी तरह के "नए मानक" को शुरू करने की सिफारिश नहीं करूंगा stdlib.h

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.