linux shell set e,set -e在bash脚本中的含义是什么?

根据bash - Set Builtin手册,如果设置了-e/ errexit,如果管道由单个简单命令,列表或复合命令返回非零状态,则shell立即退出。

默认情况下,管道的退出状态是管道中最后一个命令的退出状态,除非pipefail启用该选项(默认情况下禁用该选项)。

如果是这样,管道的最后(最右边)命令的返回状态以非零状态退出,或者如果所有命令都成功退出则返回零。

如果您想在退出时执行某些操作,请尝试定义trap,例如:trap onexit EXIT

这里onexit是你的函数做一些事情上退出,像下面这是印刷简单的堆栈跟踪:onexit(){ while caller $((n++)); do :; done; }

有类似的选项-E/errtrace会在ERR上陷阱,例如:trap onerr ERR

例子

零状态示例:$ true; echo $?0

非零状态示例:$ false; echo $?1

否定状态示例:$ ! false; echo $?0$ false || true; echo $?0

pipefail禁用测试:$ bash -c 'set +o pipefail -e; true | true | true; echo success'; echo $?success0$ bash -c 'set +o pipefail -e; false | false | true; echo success'; echo $?success0$ bash -c 'set +o pipefail -e; true | true | false; echo success'; echo $?1

pipefail启用测试:$ bash -c 'set -o pipefail -e; true | false | true; echo success'; echo $?1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值