You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Bash中忽略特定退出码的最优方法及多码场景处理

Bash中处理timeout退出码的标准实现方法

处理单个忽略退出码(仅忽略超时124)

不用单独获取$?再判断,直接通过命令后接||捕获非零退出状态,在后续块中处理逻辑:

timeout my_cmd || {
  local exit_code=$?
  if [ "$exit_code" -ne 124 ]; then
    exit "$exit_code"
  fi
}
other_cmds

逻辑说明:

  • timeout my_cmd执行后,若返回非零退出码,进入||后的代码块
  • 捕获退出码到局部变量exit_code,避免被后续命令覆盖
  • 若退出码不是124(即非超时失败),直接以该码退出脚本;若是124,则跳过退出,继续执行other_cmds

处理多个忽略退出码

如果需要忽略多个退出码(比如同时忽略超时124和用户中断130),用case语句更清晰:

timeout my_cmd || {
  local exit_code=$?
  case "$exit_code" in
    124|130) : ;; # 空命令,什么都不做,直接继续
    *) exit "$exit_code" ;; # 其他错误码直接退出脚本
  esac
}
other_cmds

逻辑说明:

  • case匹配退出码,指定需要忽略的码用|分隔
  • :是bash的空命令,用于占位表示“忽略该情况,继续执行”
  • 未匹配到的退出码,直接以原码退出脚本,终止后续执行

补充说明

  • 这种写法比单独用$?判断更可靠,避免了$?被中间命令意外覆盖的问题
  • 如果脚本开启了set -e(errexit模式,命令失败即退出),该写法依然有效,因为||会让set -e忽略当前命令的错误,转而执行我们自定义的退出逻辑

内容的提问来源于stack exchange,提问作者link89

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 19:16:12