暂时停用' set-e' /'设置-o errexit'在bash?

时间:2015-03-06 13:15:10

标签: linux bash ubuntu

我有一个脚本使用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

1 个答案:

答案 0 :(得分:9)

如果您只想允许此单个命令以错误结束并认为它是正常的,您可以:

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