쉘 스크립팅의 경우, 때때로 이름이 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
generator 이름을 지정했다고 가정하면 ( )로 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)$
이를 얻으려면 exit2str 함수에 대한 정보가 필요하지 않습니다.
$ ./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) 있지만 (나는 하나입니다) 나는 때때로 규칙을 따르려고 노력합니다 .