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

Bash脚本中trap ERR触发函数的参数及触发场景咨询

问题解答

1. my_func除$LINENO外接收的参数

不会自动接收其他额外参数。当前陷阱命令是显式调用my_func ${LINENO},只有手动传入的行号${LINENO}会作为函数的第一个参数($1)。如果需要获取触发错误的命令的退出状态,需要在my_func内部通过$?变量读取,而非函数参数。

2. 函数触发的错误场景

结合set -e和ERR陷阱的规则,my_func会在以下场景被触发:

  • 脚本中直接执行的命令退出状态非0,且该命令不在if/elif/while/until的条件判断逻辑中,也不属于&&/||命令链的一部分
  • 命令链(&&/||)的最后一个命令执行失败,且该失败会触发set -e的脚本终止逻辑
  • 开启set -o pipefail选项后,管道中任意命令执行失败(此时整个管道的退出状态为失败),且满足set -e的触发条件
  • 函数执行后返回非0状态,且该函数调用符合上述set -e的触发规则
  • 执行不存在的命令、权限不足的命令等导致非0退出状态,且满足set -e的触发条件

注意:set -e在交互式shell中默认不生效,上述场景仅针对非交互式的脚本执行环境。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 20:05:33