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