আমি কীভাবে প্রস্থান কোডের তালিকা (এবং / অথবা রিটার্ন কোডগুলি) এবং একটি আদেশ / ইউটিলিটির জন্য অর্থ পেতে পারি?


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).

দ্বিতীয় : গুগল । উদাহরণ হিসাবে উইজেট দেখুন ।

তৃতীয় : শেলের প্রস্থান স্থিতি, উদাহরণস্বরূপ বাশ। বাশ এবং এটির বিল্টিনগুলি বিশেষত 125 এর উপরে মান ব্যবহার করতে পারে। কমান্ডের জন্য 127 পাওয়া যায় নি, 126 কমান্ড কার্যকর করা যায় না। আরও তথ্যের জন্য ব্যাশের প্রস্থান কোডগুলি দেখুন


হ্যাঁ কিছু লোক, তথ্য, ... পৃষ্ঠাগুলি এগুলিকে অন্তর্ভুক্ত করে .. এবং আমি যারা ছিল না তাদের সাথে আমি উদ্বিগ্ন ছিল। .. এবং আমি জানি যে ওয়েব গবেষণা সর্বদা একটি বিকল্প is ..এখন আপাতত এটি দেখা যাচ্ছে এটি কেবলমাত্র বাশ প্রস্থান কোডগুলির জন্য আমার সন্ধান করতে হবে ..
যথাযথ

12

প্রস্থান কোডগুলি কোনও প্রোগ্রাম শেষ করার সময় একটি ব্যর্থতার শর্ত নির্দেশ করে এবং সেগুলি 0 এবং 255 এর মধ্যে পড়ে The প্রস্থান স্থিতি হিসাবে 128 + N মান ব্যবহার করে)। দেখা: বাশ - 3.7.5 প্রস্থান স্থিতি বা man bash

সাধারণভাবে একটি শূন্য প্রস্থান স্থিতি নির্দেশ করে যে কোনও কমান্ড সফল হয়েছে , একটি শূন্য- বহির্গমন স্থিতি ব্যর্থতা নির্দেশ করে ।

কমান্ড দ্বারা কোন ত্রুটি কোডটি ফিরে এসেছে তা পরীক্ষা করতে, আপনি $?সর্বশেষ প্রস্থান কোডের জন্য মুদ্রণ করতে পারেন বা শেল স্ক্রিপ্টটি প্রস্থান হওয়ার পরে পাইপলাইন (বাশ-এ) ${PIPESTATUS[@]}থেকে প্রস্থান স্থিতির মানগুলির একটি তালিকা দেয় ।

পাওয়া যাবে এমন সমস্ত প্রস্থান কোডের সম্পূর্ণ তালিকা নেই, তবে কার্নেল উত্সে প্রস্থান স্থিতির সংখ্যাগুলি পদ্ধতিবদ্ধ করার চেষ্টা করা হয়েছে, তবে এটি সি / সি ++ প্রোগ্রামারদের জন্য মূল উদ্দেশ্য এবং স্ক্রিপ্টিংয়ের জন্য অনুরূপ মান যথাযথ হতে পারে।

প্রোগ্রামগুলির জন্য পছন্দসই প্রস্থান কোড (-৪-7878) সহ লিনাক্স এবং বিএসডি / ওএস এক্স উভয়ের সিসেক্সিটের কয়েকটি তালিকা পাওয়া যাবে /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 থেকে পূর্বে অব্যবহৃত প্রস্থান কোডগুলি বরাদ্দ করে। ভবিষ্যতে অপ্রচলিত বহির্গমন কোডের ব্যাপ্তি আরও সীমাবদ্ধ থাকবে।

তবে উপরের মানগুলি মূলত সেন্ডমেলে ব্যবহৃত হয় এবং অন্য কারও দ্বারা ব্যবহৃত হয় না, তাই এগুলি মানকটির কাছাকাছি দূরবর্তী কিছু নয় ( @ গিলিস দ্বারা নির্দেশিত হিসাবে )।

শেলের মধ্যে প্রস্থান স্থিতি অনুসরণ করা (বাশের উপর ভিত্তি করে):

  • 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- মারাত্মক ত্রুটি সংকেত "n" - সংকেত পাওয়ার কারণে কমান্ডটি মারা গেল। স্থিতিটি পাওয়ার জন্য সিগন্যাল কোডটি 128 (128 + সিগন্যাল) এ যুক্ত করা হয়েছে (লিনাক্স man 7 signal:, বিএসডি man signal:), নীচে কয়েকটি উদাহরণ:

  • 130 - কন্ট্রোলটি সিটিআরএল-সি চেপে থাকার কারণে শেষ হয়েছে, 130-128 = 2 (সাইন ইন)

    উদাহরণ:

    $ 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মানগুলি সিস্টেম এপিআই দ্বারা ব্যবহৃত হয়, এগুলি প্রস্থান স্থিতি হিসাবে ব্যবহার হয় না (তারা এমনকি সঠিক পরিসরে নয়) এবং তারা শেল স্ক্রিপ্টিংয়ের জন্য অপ্রাসঙ্গিক। Sysexits মানগুলি সেন্ডমেল থেকে নেওয়া এবং অন্য কারও দ্বারা ব্যবহৃত হয় না, এগুলি কোনও স্ট্যান্ডার্ডের কাছ থেকে দূরবর্তী কিছু নয়।
গিলস 'অশুভ হওয়া বন্ধ করুন'

7

আপনাকে কোড / ডকুমেন্টেশন সন্ধান করতে হবে। যাইহোক যে জিনিসটি " মানককরণ " এর নিকটে আসে তা হ'ল ভুল


শিরোলেখ ফাইলটি নির্দেশ করার জন্য ধন্যবাদ .. কয়েকটি ব্যবহারকারীর ডকুমেন্টেশন সন্ধান করার চেষ্টা করা হয়েছে .. প্রস্থান কোডগুলি খুঁজে পাওয়ার জন্য খুব কঠিন সময় মনে হচ্ছে বেশিরভাগ স্টাডার হবে ...
যথাযথ

3
errno.hকোডটি প্রস্থান করার সময় এটি অপ্রাসঙ্গিক হয়, কেবল ত্রুটি বার্তা।
গিলস 'দুষ্ট হওয়া বন্ধ করুন'

বিএসডি কনভেনশন অনুসারে বেশিরভাগ প্রোগ্রামগুলি প্রস্থান কোডগুলি ফেরত দেয়, যেমন উল্লেখ করা হয়েছিল sysexits.h। যাইহোক, কিছু প্রোগ্রাম রিটার্ন দেয় errnoএবং আমি আসলেই ফিরে আসার errnoসার্থক করে বলে মনে করি । errnoব্যতিক্রমহীনদের মতো আনহানডেলগুলি ওপরের দিকে প্রচার করে ( errnoস্থায়ী অবস্থানগুলি, ফাংশনগুলি রিটার্ন যেমন, -1বা 0|NULL)। যেহেতু প্রোগ্রামগুলি কেবলমাত্র ফাংশন, তবুও পৃথক ঠিকানার জায়গায় চালিত ফাংশন, এটি উপলব্ধি করে যে কোনও প্রোগ্রাম errnoপ্রক্রিয়া সীমানা জুড়ে প্রচার চালিয়ে যেতে চাইবে ।
পিএসকোকিক

@ এসপোসিক, আপনার কি এমন কমান্ডের উদাহরণ রয়েছে? এরনোসগুলি বহনযোগ্য নয় (মানগুলি সিস্টেমের সাথে সামঞ্জস্যপূর্ণ নয়), এবং মান থেকে ত্রুটিযুক্ত নাম বা বার্তা পাওয়ার কোনও পোর্টেবল উপায় নেই (zsh এর জন্য একটি বিল্টিন রয়েছে)। কিছু সিস্টেমের মধ্যে 123 এরও বেশি ভুল রয়েছে যা সাধারণ বিশেষ-অর্থপূর্ণ ত্রুটি কোডগুলির সাথে সংঘর্ষিত হবে mention সাধারণত, কমান্ডগুলি এর্নো থেকে বার্তাগুলি মুদ্রণ করে এবং সাফল্য / ব্যর্থতার প্রস্থান স্থিতি ফিরিয়ে দেয়। কমান্ডগুলি ব্যবহারকারীদের জন্য তৈরি। ফাংশন / সিস্টেম কল প্রোগ্রামারদের জন্য উদ্দেশ্যে করা হয়।
স্টাফেন চেজেলাস

@ স্টাফেনচাজেলাস আমি এটি কয়েকবার দেখেছি, তবে কোনও সুপ্রতিষ্ঠিত প্রোগ্রামে নয়, আমাকে স্বীকার করতে হবে। আমি ইদানীং আমার খেলনা সিস্টেমে ব্যক্তিগতভাবে + 1 ফিরে আসছি (যাতে 1 এর অর্থ "কোনও ত্রুটি" হিসাবে অব্যাহত রয়েছে) কারণ আমি মনে করি যে প্রক্রিয়া সীমানা পেরিয়ে ক্রমিকরূপীকরণটি বিএসডি কনভেনশন অনুসারে অনুবাদ করার চেয়ে ভাল বোঝা যায়, যেমন প্রোগ্রামের মৃত্যুদন্ড কার্যকর হয় মূলত আমন্ত্রণগুলি ফাংশন করে এবং ফাংশনগুলি এর্ন ব্যবহার করে। আমি আমার নিজের শেষ-প্রস্থান-স্থিতি ডিকোডারটি আমার PROMPT_COMMAND (ব্যাশ) এ ব্যবহার করি যাতে আমি এর মতো কিছু পাই "($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
পিএসকোকিক

1

আমি যতদূর জানি, কেবলমাত্র দুটি, কম-বেশি বা কম, মান মান রয়েছে - উভয়ই stdlib.hপ্রস্থান () এর সাথে ব্যবহারের জন্য সংজ্ঞায়িত হয়েছে :

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

এবং একমাত্র ডি-ফ্যাক্টো স্ট্যান্ডার্ড মান, অর্থাত্, বিশ্বের সমস্ত প্রোগ্রামের জন্য একই অর্থ থাকা, 0 (শূন্য) যা সাফল্যকে বোঝায়।

বিভিন্ন প্রোগ্রাম পৃথক ত্রুটিগুলি (বিভিন্ন ধরণের বা তীব্রতা) আলাদা করতে বা জোর দেওয়ার জন্য ফিরে আসা "ব্যর্থতা" -র কোডগুলির বিভিন্ন তালিকা উপস্থাপন করে। কিছু প্রোগ্রাম এমনকি আবিষ্কৃত রানটাইম ত্রুটির পূর্ণসংখ্যার সংখ্যা জানাতে ফেরত মান ব্যবহার করে (উদাহরণস্বরূপ, স্যুটে ব্যর্থ ইউনিট-পরীক্ষার সংখ্যা)।

আমি প্রসারিত কোনও ধরণের "নতুন স্ট্যান্ডার্ড" প্রবর্তনের পরামর্শ দেব না stdlib.h

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.