শেল স্ক্রিপ্টিংয়ের জন্য, আমি মাঝে মাঝে sysexist.h
শেল-সংরক্ষিত প্রস্থান কোডগুলির সাথে শেল সমতুল্য উত্স উত্স S_EX_
করি, যা আমি নাম দিয়েছিexit.sh
এটি মূলত:
EX_OK=0 # successful termination
EX__BASE=64 # base value for error messages
EX_USAGE=64 # command line usage error
EX_DATAERR=65 # data format error
EX_NOINPUT=66 # cannot open input
EX_NOUSER=67 # addressee unknown
EX_NOHOST=68 # host name unknown
EX_UNAVAILABLE=69 # service unavailable
EX_SOFTWARE=70 # internal software error
EX_OSERR=71 # system error (e.g., can't fork)
EX_OSFILE=72 # critical OS file missing
EX_CANTCREAT=73 # can't create (user) output file
EX_IOERR=74 # input/output error
EX_TEMPFAIL=75 # temp failure; user is invited to retry
EX_PROTOCOL=76 # remote error in protocol
EX_NOPERM=77 # permission denied
EX_CONFIG=78 # configuration error
EX__MAX=78 # maximum listed value
#System errors
S_EX_ANY=1 #Catchall for general errors
S_EX_SH=2 #Misuse of shell builtins (according to Bash documentation); seldom seen
S_EX_EXEC=126 #Command invoked cannot execute Permission problem or command is not an executable
S_EX_NOENT=127 #"command not found" illegal_command Possible problem with $PATH or a typo
S_EX_INVAL=128 #Invalid argument to exit exit 3.14159 exit takes only integer args in the range 0 - 255 (see first footnote)
#128+n Fatal error signal "n" kill -9 $PPID of script $? returns 137 (128 + 9)
#255* Exit status out of range exit -1 exit takes only integer args in the range 0 - 255
S_EX_HUP=129
S_EX_INT=130
#...
এবং এর সাথে উত্পন্ন করা যেতে পারে:
#!/bin/sh
src=/usr/include/sysexits.h
echo "# Generated from \"$src\""
echo "# Please inspect the source file for more detailed descriptions"
echo
< "$src" sed -rn 's/^#define *(\w+)\s*(\d*)/\1=\2/p'| sed 's:/\*:#:; s:\*/::'
cat<<'EOF'
#System errors
S_EX_ANY=1 #Catchall for general errors
S_EX_SH=2 #Misuse of shell builtins (according to Bash documentation); seldom seen
S_EX_EXEC=126 #Command invoked cannot execute Permission problem or command is not an executable
S_EX_NOENT=127 #"command not found" illegal_command Possible problem with $PATH or a typo
S_EX_INVAL=128 #Invalid argument to exit exit 3.14159 exit takes only integer args in the range 0 - 255 (see first footnote)
#128+n Fatal error signal "n" kill -9 $PPID of script $? returns 137 (128 + 9)
#255* Exit status out of range exit -1 exit takes only integer args in the range 0 - 255
EOF
$(which kill) -l |tr ' ' '\n'| awk '{ printf "S_EX_%s=%s\n", $0, 128+NR; }'
যদিও আমি এটি খুব বেশি ব্যবহার করি না তবে আমি যা ব্যবহার করি তা হ'ল শেল ফাংশন যা ত্রুটি কোডগুলি তাদের স্ট্রিং ফর্ম্যাটগুলিতে বিপরীত করে। আমি নাম দিয়েছি exit2str
। ধরে নিই যে আপনি উপরের exit.sh
জেনারেটরের নাম দিয়েছেন exit.sh.sh
, এর জন্য কোডটি exit2str
( exit2str.sh.sh
) দিয়ে তৈরি করা যেতে পারে :
#!/bin/sh
echo '
exit2str(){
case "$1" in'
./exit.sh.sh | sed -nEe's|^(S_)?EX_(([^_=]+_?)+)=([0-9]+).*|\4) echo "\1\2";;|p'
echo "
esac
}"
আমি এটি PS1
আমার ইন্টারেক্টিভ শেলের মধ্যে ব্যবহার করি যাতে আমি চালিত প্রতিটি কমান্ডের পরে আমি এর প্রস্থান স্থিতি এবং তার স্ট্রিং ফর্মটি দেখতে পাই (যদি এটির একটি পরিচিত স্ট্রিং ফর্ম থাকে):
[15:58] pjump@laptop:~
(0=OK)$
[15:59] pjump@laptop:~
(0=OK)$ fdsaf
fdsaf: command not found
[15:59] pjump@laptop:~
(127=S_NOENT)$ sleep
sleep: missing operand
Try 'sleep --help' for more information.
[15:59] pjump@laptop:~
(1=S_ANY)$ sleep 100
^C
[15:59] pjump@laptop:~
(130=S_INT)$ sleep 100
^Z
[1]+ Stopped sleep 100
[15:59] pjump@laptop:~
(148=S_TSTP)$
এগুলি পেতে, আপনার প্রস্থান 2 স্টোরের জন্য একটি ইনসার্কেবল দরকার:
$ ./exit2str.sh.sh > exit2str.sh #Place this somewhere in your PATH
এবং তারপরে ~/.bashrc
প্রতিটি কমান্ড প্রম্পটে প্রস্থান কোডটি সংরক্ষণ এবং অনুবাদ করতে এটি আপনার ব্যবহার করুন এবং এটি আপনার প্রম্পট প্রদর্শন করুন ( PS1
):
# ...
. exit2str.sh
PROMPT_COMMAND='lastStatus=$(st="$?"; echo -n "$st"; str=$(exit2str "$st") && echo "=$str"); # ...'
PS1="$PS1"'\n($lastStatus)\$'
# ...
কিছু প্রোগ্রাম কীভাবে প্রস্থান কোড কনভেনশন অনুসরণ করে এবং কিছু না করে, প্রস্থান কোড কনভেনশন সম্পর্কে শেখার জন্য, বা আরও কী কী সহজে চলছে তা দেখতে সক্ষম হয়ে ওঠার জন্য এটি বেশ কার্যকর। এটি কিছু সময়ের জন্য ব্যবহার করার পরে, আমি বলতে পারি যে অনেক সিস্টেম-ভিত্তিক শেল স্ক্রিপ্টগুলি সম্মেলনগুলি অনুসরণ করে। EX_USAGE
বিশেষত খুব সাধারণ, যদিও অন্যান্য কোডগুলি খুব বেশি না। আমি সময়ে সময়ে সম্মেলনগুলি অনুসরণ করার চেষ্টা করি, যদিও $S_EX_ANY
অলস লোকদের জন্য সর্বদা (1) আমি (আমি একজন)।