我有一个bash脚本,我想全局启用set -e.
但是不是一直禁用它并重新启用它,我想知道是否有一种方法可以选择性地禁用错误处理.例如,从systemd运行的命令可以在减号之前忽略错误.bash有同等效力吗?
例如
#!/bin/bash
set -e
WAN_IF=eth2
# Ignore error on next line
tc qdisc del dev ${WAN_IF} root
# I want errors to stop the script on this line
tc qdisc add dev ${WAN_IF} root handle 1: htb default 10
...
etc
Run Code Online (Sandbox Code Playgroud)
由于需要启用/禁用很多,我不想继续执行以下操作:
set +e
tc qdisc del dev ${WAN_IF} root
# I want errors to stop the script on this line
set -e
tc qdisc add dev ${WAN_IF} root handle 1: htb default 10
...
Run Code Online (Sandbox Code Playgroud)
|| :在命令的末尾添加(或保证不会失败但是最简单的任何其他内容).
虽然很多人只是告诉你这set -e不值得,因为它没有你想象的那么有用(并导致这样的问题),手动错误检查是一个更好的策略.
(我不在那个阵营中,但是我越是遇到这样的问题,我觉得有一天我可能会到达那里.)
从thatotherguy的评论解释一个主要的问题set -e:
问题
set -e不在于您必须小心要允许哪些命令失败.问题是它没有构成.如果其他人阅读此帖并使用source yourfile || :在允许失败的同时获取此脚本,则突然yourfile将不再在任何地方停止错误.在显式之后甚至没有失败的行set -e.