উত্তর:
প্রদত্ত টার্মিনাল কমান্ডের প্রস্থান স্থিতির অর্থ পেতে কোনও "রেসিপি" নেই।
আমার প্রথম প্রচেষ্টা ম্যানপেজ হবে:
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 কমান্ড কার্যকর করা যায় না। আরও তথ্যের জন্য ব্যাশের প্রস্থান কোডগুলি দেখুন ।
প্রস্থান কোডগুলি কোনও প্রোগ্রাম শেষ করার সময় একটি ব্যর্থতার শর্ত নির্দেশ করে এবং সেগুলি 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 মানগুলি সেন্ডমেল থেকে নেওয়া এবং অন্য কারও দ্বারা ব্যবহৃত হয় না, এগুলি কোনও স্ট্যান্ডার্ডের কাছ থেকে দূরবর্তী কিছু নয়।
errno.h
কোডটি প্রস্থান করার সময় এটি অপ্রাসঙ্গিক হয়, কেবল ত্রুটি বার্তা।
sysexits.h
। যাইহোক, কিছু প্রোগ্রাম রিটার্ন দেয় errno
এবং আমি আসলেই ফিরে আসার errno
সার্থক করে বলে মনে করি । errno
ব্যতিক্রমহীনদের মতো আনহানডেলগুলি ওপরের দিকে প্রচার করে ( errno
স্থায়ী অবস্থানগুলি, ফাংশনগুলি রিটার্ন যেমন, -1
বা 0|NULL
)। যেহেতু প্রোগ্রামগুলি কেবলমাত্র ফাংশন, তবুও পৃথক ঠিকানার জায়গায় চালিত ফাংশন, এটি উপলব্ধি করে যে কোনও প্রোগ্রাম errno
প্রক্রিয়া সীমানা জুড়ে প্রচার চালিয়ে যেতে চাইবে ।
"($numeric_code|$bsd_decoded|$errno_plus_one_decoded)"
।
আমি যতদূর জানি, কেবলমাত্র দুটি, কম-বেশি বা কম, মান মান রয়েছে - উভয়ই stdlib.h
প্রস্থান () এর সাথে ব্যবহারের জন্য সংজ্ঞায়িত হয়েছে :
এবং একমাত্র ডি-ফ্যাক্টো স্ট্যান্ডার্ড মান, অর্থাত্, বিশ্বের সমস্ত প্রোগ্রামের জন্য একই অর্থ থাকা, 0 (শূন্য) যা সাফল্যকে বোঝায়।
বিভিন্ন প্রোগ্রাম পৃথক ত্রুটিগুলি (বিভিন্ন ধরণের বা তীব্রতা) আলাদা করতে বা জোর দেওয়ার জন্য ফিরে আসা "ব্যর্থতা" -র কোডগুলির বিভিন্ন তালিকা উপস্থাপন করে। কিছু প্রোগ্রাম এমনকি আবিষ্কৃত রানটাইম ত্রুটির পূর্ণসংখ্যার সংখ্যা জানাতে ফেরত মান ব্যবহার করে (উদাহরণস্বরূপ, স্যুটে ব্যর্থ ইউনিট-পরীক্ষার সংখ্যা)।
আমি প্রসারিত কোনও ধরণের "নতুন স্ট্যান্ডার্ড" প্রবর্তনের পরামর্শ দেব না stdlib.h