【问题标题】:Temporarily disable 'set-e' / 'set -o errexit' in bash? [duplicate]在 bash 中暂时禁用“set-e”/“set -o errexit”? [复制]
【发布时间】:2015-05-08 02:29:29
【问题描述】:

我有一个脚本,它使用killall 来确保应用在启动之前尚未运行:

#!/bin/bash

set -e

some_command
another_command

sudo killall myapp # this causes the script to fail if myapp isn't running
sleep 10
myapp start

但是,如果 myapp 没有运行,killall 将退出脚本,因为它返回一个错误。

解决此问题的一种方法是暂时禁用set -o errexit

#!/bin/bash

set -e

some_command
another_command

set +e
sudo killall myapp # this causes the script to fail if myapp isn't running
set -e
sleep 10
myapp start

但是,上述方法相当混乱。还有哪些其他选项可以暂时禁用set -e

【问题讨论】:

  • 我知道没有其他方法,但如果它只是一个命令,你可以忽略它的退出代码:some_command || true

标签: linux bash ubuntu


【解决方案1】:

如果你只想让这个命令以错误结束并认为它是正常的,你可以:

sudo killall myapp || :

: 是 bash 中的一个 noop。实际上,上面的行尽可能明确地表达了“错误时什么也不做”。你可以用更惯用的方式达到同样的效果:

sudo killall myapp || true

当然你也可以做其他事情,比如:

sudo killall myapp || echo "Failed to kill Myapp, probably it is not running at the moment." >&2

【讨论】:

    猜你喜欢
    • 2017-05-04
    • 1970-01-01
    • 1970-01-01
    • 2018-06-13
    • 2016-06-18
    • 1970-01-01
    • 2016-08-21
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多