Exit Codes With Special Meanings (Linux)

本文详细解释了Shell脚本中各种退出状态码的意义及用途,并提出了一个标准化建议,以帮助开发者更好地理解和使用这些状态码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文:http://tldp.org/LDP/abs/html/exitcodes.html



Exit Codes With Special Meanings

Table E-1. Reserved Exit Codes

Exit Code NumberMeaningExampleComments
1Catchall for general errorslet "var1 = 1/0"Miscellaneous errors, such as "divide by zero" and other impermissible operations
2Misuse of shell builtins (according to Bash documentation)empty_function() {}Missing keyword or command
126Command invoked cannot execute/dev/nullPermission problem or command is not an executable
127"command not found"illegal_commandPossible problem with $PATH or a typo
128Invalid argument to exitexit 3.14159exit takes only integer args in therange0 - 255 (seefirst footnote)
128+nFatal error signal "n"kill -9 $PPID of script$? returns137 (128 + 9)
130Script terminated by Control-CCtl-CControl-C is fatal error signal 2, (130 = 128 + 2, see above)
255*Exit status out of rangeexit -1exit takes only integer args in the range0 - 255

According to the above table, exit codes 1 - 2, 126 - 165, and 255[1]have special meanings, and should therefore be avoided foruser-specified exit parameters. Ending a script with exit127 would certainly cause confusion when troubleshooting(is the error code a"command not found" or auser-defined one?). However, many scripts use anexit1 as a general bailout-upon-error. Since exit code1 signifies so many possible errors,it is not particularly useful in debugging.

There has been an attempt to systematize exit status numbers(see /usr/include/sysexits.h),but this is intended for C and C++ programmers. A similarstandard for scripting might be appropriate. The author ofthis document proposes restricting user-defined exit codes tothe range64 - 113 (in addition to0, for success), to conform withthe C/C++ standard. This would allot 50 valid codes, and maketroubleshooting scripts more straightforward.[2]All user-defined exit codes in the accompanying examples tothis document conform to this standard, except where overridingcircumstances exist, as inExample 9-2.

Note

Issuing a $? fromthe command-line after a shell script exits givesresults consistent with the table above only from theBash orsh prompt. Running theC-shell ortcshmay give different values in some cases.

Notes

[1]

Out of range exit values can result in unexpected exit codes. An exit value greater than255 returns an exit codemodulo256. For example, exit 3809 gives an exit code of225 (3809 % 256 = 225).

[2]

An update of /usr/include/sysexits.h allocates previously unused exit codes from64 - 78. It may be anticipated that the range of unallotted exit codes will be further restricted in the future. The author of this document willnot do fixups on the scripting examples to conform to the changing standard. This should not cause any problems, since there is no overlap or conflict in usage of exit codes between compiled C/C++ binaries and shell scripts.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值