我有一个脚本用于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
Run Code Online (Sandbox Code Playgroud)
但是,如果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
Run Code Online (Sandbox Code Playgroud)
但是,上述方法相当混乱.还有哪些其他选项暂时禁用set -e?
sba*_*ski 10
如果您只想允许此单个命令以错误结束并认为它是正常的,您可以:
sudo killall myapp || :
Run Code Online (Sandbox Code Playgroud)
:是bash中的noop.有效地,上面的行尽可能明确地表达"在错误上无所作为".你可以用更多的惯用语来达到同样的效果:
sudo killall myapp || true
Run Code Online (Sandbox Code Playgroud)
当然你也可以做其他事情:
sudo killall myapp || echo "Failed to kill Myapp, probably it is not running at the moment." >&2
Run Code Online (Sandbox Code Playgroud)