我正在使用亚马逊Linux。我想启动一个进程,前提是该进程尚未运行。这是我嵌入 Jenkins Maven 作业中的 bash 脚本。所以我有
pids=$(pidof /usr/bin/Xvfb)
if [ ! -n "$pids" ]; then
Xvfb :0 -screen 5 1024x768x8 &
fi
不幸的是,如果没有进程,“pids=$(pidof /usr/bin/Xvfb)”行将返回失败的退出代码,并且后面的任何其他行都不会执行。有没有一种方法可以编写上述内容,这样就不会返回失败的退出代码?
答案1
如果您在 下运行set -e
,请|| true
在命令后添加以忽略该命令的失败。
pids=$(pidof /usr/bin/Xvfb || true)
if [ ! -n "$pids" ]; then
Xvfb :0 -screen 5 1024x768x8 &
fi
但由于pidof
如果没有找到进程,则返回非零状态,因此您可以直接测试其返回状态,而不是检查其输出是否为空。
if ! pidof /usr/bin/Xvfb >/dev/null 2>&1; then
Xvfb :0 -screen 5 1024x768x8 &
fi