Bhu*_*han 26 bash shell scripting
我有一个带-e选项集的bash脚本,它在第一个错误时使整个脚本失败.
在脚本中,我正在尝试ls在目录上执行操作.但是这条路可能存在也可能不存在.如果该路径不存在,则该ls命令将失败,因为该-e标志已设置.
有没有办法可以防止脚本失败?
作为一个方面说明,我已经试过的伎俩做一个set +e与set -e前和命令后,它的工作原理.但我正在寻找更好的解决方案.
che*_*ner 39
您可以使用"捕获"错误||并保证以0状态退出的命令:
ls $PATH || echo "$PATH does not exist"
Run Code Online (Sandbox Code Playgroud)
由于复合命令成功是否$PATH存在,set -e因此不会触发,您的脚本也不会退出.
要以静默方式抑制错误,可以使用以下true命令:
ls $PATH || true
Run Code Online (Sandbox Code Playgroud)
要执行多个命令,可以使用以下复合命令之一:
ls $PATH || { command1; command2; }
Run Code Online (Sandbox Code Playgroud)
要么
ls $PATH || ( command1; command2 )
Run Code Online (Sandbox Code Playgroud)
请确保在复合命令中都没有任何失败.第二个示例的一个好处是您可以在子shell中关闭立即退出模式,而不会影响其在当前shell中的状态:
ls $PATH || ( set +e; do-something-that-might-fail )
Run Code Online (Sandbox Code Playgroud)
另一种选择是用来trap捕捉EXIT信号:
trap 'echo "ls failed" ; some_rescue_action' EXIT
ls /non_exist
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9792 次 |
| 最近记录: |