为什么有些人在出错时退出-1而不是退出1?

时间:2015-10-14 15:40:20

标签: bash shell error-handling scripting sh

我正在编写一个相当简单的bash脚本;如果我检测到错误(没有来自其他进程的错误退出状态)我想退出,退出状态表示错误(没有太具体)。

好像我应该exit 1(例如按照the TLDP Advanced Bash Scripting Guide和C标准库的stdlib.h标题);但我注意到很多人exit -1。那是为什么?

1 个答案:

答案 0 :(得分:5)

TLDP的ABS的有效性值得怀疑(因为它经常使用,不经评论,低于标准的做法)所以我不会将其视为关于此的正确性的基础。

表示有效命令返回码介于0255之间,0为“成功”。所以是的,1是完全有效的(和常见的)错误代码。

显然我不能肯定地说其他人为什么这样做但我对这个主题有两点想法。

  1. 上下文切换失败(可能与缺乏域知识相结合)。

    在许多语言中,函数的返回值-1是一个完全有效的值,并且可以从通常返回的所有正值中脱颖而出。

    因此尝试将该模式(作者随着时间的推移而选择)扩展到shell脚本/ etc。对他们来说是合情合理的。特别是如果他们没有领域知识,就会发现有效的返回代码介于0 255之间。

  2. 尝试让这些错误退出行从正常退出案例中“脱颖而出”(可能会或可能不会成功退出),以尝试在视觉上区分某组极不可能或非常特殊的退出案例

    退出-1确实有效,它只是没有得到-1的返回码,它会返回255的返回码。 (在你的shell中尝试(exit -1); echo $?来看看。)所以这不是一件完全不合理的事情(尽管在混淆退出代码方面令人困惑和同谋)。