Skip to content
SRE运维进阶之路SRE运维进阶之路
github icon
  • 前端学习笔记

    author iconLinuxStorycalendar icon2021年5月11日category icon
    • Linux
    tag icon
    • Bash
    timer icon大约 2 分钟

    退出代码表意示例注释
    1通用错误let "var1 = 1/0"其他错误,如除以零错误及其他无权限操作。
    2(据 Bash 文档) 误用 Shell builtinsempty_function() {}缺失关键词或指令,或权限问题 (及 diff 在二进制文件比较时的返回值)
    126调用的指令无法执行/dev/null权限问题或命令不可执行
    127「未找到指令」illegal_command可能是 $PATH 有问题或输入有误。
    128exit 的参数有误exit 3.14159exit 只接受范围在 0 - 255 的整数 (见第一个脚注)
    128+n错误信号 “n”脚本的 kill -9 $PPID$? 返回 137 (128 + 9)
    130脚本被 Control-C 终止Ctl-CControl-C 是错误信号 2 (130 = 128 + 2, 见上)
    255*错误状态超范围exit -1exit 只接受范围在 0 - 255 的整数

    根据上表,退出代码 1 - 2,126 - 165 及 255 有特别含义,并因此应避免用于用户定义的退出代码。以 exit 127 结束代码一定会在调试时导致混乱 (这是「命令未找到」的错误代码还是用户定义的?)。然而,许多脚本把 exit 1 当作出错通用退出指令。因为退出代码 1 表示许多可能的错误,这对调试不是很有用。

    对此曾有过系统化退出代码的尝试 (见 /usr/include/sysexits.h),但这是为了 C/C++ 程序员的。脚本中类似的标准可能比较恰当。文档作者提议限制用户定义的错误代码为 64 - 113 (包括表示成功的 0),以符合 C/C++ 标准。这会分配 50 个可用代码,也会使脚本排错更直观。本文档中所有脚本示例符合这个标准,除了需要违反这一点的情况,如 例 9-2。

    {% hint style="info" %} 只有在 Bash 或 sh 提示符中,Shell 脚本退出后在命令行执行 $? 才会给出与上表一致的结果,运行 C-shell 或 tcsh 有时会给出不同的结果。 {% endhint %}

    edit icon编辑此页open in new window
    上次编辑于: 2022/4/27 15:33:00
    贡献者: clay-wangzhi
    备案号:冀ICP备2021007336号
    Copyright © 2023 LinuxStory