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
相关产品推荐
相关产品推荐

