【问题标题】:Why do some people exit -1 rather than exit 1 on error?为什么有些人在出错时退出 -1 而不是退出 1?
【发布时间】:2016-01-12 19:18:11
【问题描述】:

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

看来我应该做exit 1(例如根据the TLDP Advanced Bash Scripting Guide,以及C 标准库的stdlib.h 标头);但是我注意到很多人exit -1。这是为什么呢?

【问题讨论】:

  • 你在哪里看到这个?
  • @Random832:在你无法访问的代码中 :-( 而且,我记得这些年来我看到了一堆 exit -1 ,我只是没有多想。
  • @Random832:你的另一个例子 - here on the site
  • ABS 是一个非常糟糕的参考(在其示例中经常显示不好的做法,并且很少维护);也就是说,在这一点上是正确的。

标签: bash shell error-handling scripting sh


【解决方案1】:

TLDP 的 ABS 的有效性值得怀疑(因为它经常使用,没有评论,低于标准的做法),所以我不会把它作为一个特别正确的堡垒。

也就是说,有效的命令返回码在0255 之间,0 是“成功”。所以是的,1 是一个完全有效(且常见)的错误代码。

显然我不能确定为什么其他人会这样做,但我对这个话题有两个想法。

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

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

    因此试图将这种模式(作者随着时间的推移而接受)扩展到 shell 脚本/等。对他们来说是合理的事情。特别是如果他们没有领域知识来意识到有效的返回码在0255之间。

  2. 尝试让这些错误退出行从正常退出案例(可能成功退出本身也可能不成功退出)中“脱颖而出”,以尝试在视觉上区分一组极不可能或其他异常退出案例。

    -1 的退出确实有效,但它不会为您提供-1 的返回码,它会为您提供255 的返回码。 (尝试在您的 shell 中使用 (exit -1); echo $? 来查看。)因此,这并不是一件完全不合理的事情(尽管在混淆退出代码方面令人困惑和同谋)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-13
    • 2021-10-29
    • 2021-05-31
    • 1970-01-01
    • 2018-05-25
    • 2020-03-07
    • 2015-05-11
    相关资源
    最近更新 更多