1 个稳定版本
1.0.0 | 2023 年 1 月 10 日 |
---|
#17 在 #status-code
16KB
170 行
语义退出码
用法
Go
os.Exit(exit.Forbidden) // The user isn't permitted to perform this action
os.Exit(exit.Unavailable) // An API this program consumes isn't available
Rust
use semantic_exit::{exit, Code};
exit(Code::Forbidden);
exit(Code::Unavailable);
查看 退出码完整列表。
关于
传统上,程序以 0 退出表示成功,而非零表示失败。
os.Exit(0) // success
os.Exit(1) // failure
但系统调用 exit
接受 0 到 255 之间的值,留下 254 种表达失败的方式。
本库的目标是定义以下退出码:
- 适用于异构命令行工具的广泛适用性
- 易于划分为用户错误和系统错误
它定义了两个 非保留 范围的代码:80-99 用于用户错误,100-119 用于软件或系统错误。
代码
退出码 | 名称 | 含义 |
---|---|---|
0 | OK |
程序成功退出。 |
1 | NotOK |
程序未成功退出,但未提供额外的上下文说明失败原因。 |
80 | UsageError |
程序未成功退出,因为使用不当。 (例如,省略了必需的参数或为标志提供了无效的值。) |
81 | UnknownSubcommand |
程序未成功退出,因为调用了不可识别的子命令。 (由 CLI 多工具使用。) |
82 | RequirementNotMet |
程序未成功退出,因为没有满足其先决条件。 |
83 | Forbidden |
程序未成功退出,因为用户没有权限执行所请求的操作。 |
84 | MovedPermanently |
程序未成功退出,因为它已迁移到新位置。 |
100 | InternalError |
程序未成功退出,因为它自己的代码中存在问题。 (当问题已知是与程序代码或依赖项有关时,用作 1 的替代品。) |
101 | Unavailable |
程序未成功退出,因为它所依赖的服务不可用。 (例如,本地守护进程或远程服务未响应,连接意外关闭,HTTP 服务返回 503。) |
保留代码和先例
- 128 以上的值保留用于信号。 (当程序被信号终止时,其退出码为 128 加上信号的数值。例如,当您使用
Ctrl
C
终止程序时,您发送信号SIGINT
—— 其值为 2 —— 程序以 130 退出。) - Bash 保留了 2、126 和 127。
- sysexits.h 定义了 64-78。这些
sysexits.h
代码最初是为sendmail
定义的,但后来在很多地方都被使用了。(比较语义退出码与 sysexits.h 代码)
依赖关系
~0.4–1MB
~20K SLoC