最近,我从《高级Bash脚本指南》中发现了具有特殊含义的退出代码列表。他们将这些代码称为保留代码,并建议:
根据上表,退出代码1-2、126-165和255具有特殊含义,因此对于用户指定的退出参数应避免使用。
前一段时间,我编写了一个脚本,该脚本使用以下退出状态代码:
当我编写脚本时,我并不知道任何特殊的退出代码,因此我只是从第一个错误条件的1开始,然后为每种连续的错误类型增加了退出状态。
我编写该脚本的目的是,在以后的阶段可以被其他脚本调用(可以检查非零退出代码)。我实际上还没有这样做;到目前为止,我仅从交互式外壳程序(Bash)运行脚本,并且我想知道使用自定义退出代码可能导致什么/是否有任何问题。《高级Bash脚本指南》中的建议的相关性/重要性如何?
我在Bash文档中找不到任何确凿的建议;它在“退出状态”部分仅列出了Bash使用的退出代码,但未声明保留其中任何一个或警告您不要将其用于自己的脚本/程序。
已经进行了几次尝试来标准化进程出口代码的含义。除了您提到的那一项,我还知道:
BSD具有sysexits.h
定义从64开始的值的含义。
GNUgrep
文档的退出代码0表示至少找到一个匹配项,1表示没有找到匹配项,而2表示发生了I / O错误;对于其他程序,“什么都没出错但我什么也没找到”和“发生I / O错误”之间的区别很有意义,因此该约定显然也很有用。
C库函数的许多实现都system
使用退出代码127指示该程序不存在或无法启动。
在Windows上,可以将NTSTATUS
代码(不方便地散布在整个32位数字空间中)用作退出代码,尤其是那些指示进程由于灾难性的不良行为而终止的代码(例如STATUS_STACK_OVERFLOW
)。
您不能指望任何遵循这些约定中任何特定约定的给定程序。唯一可靠的规则是,退出代码0是成功,而其他任何事情都是某种失败。(请注意,C89的EXIT_SUCCESS
值不能保证为零;但是,即使值不exit(0)
相同,也必须具有相同的行为exit(EXIT_SUCCESS)
。)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句