如何在一行/语句中检查bash中的退出代码?
这就是我想做的:如何在一行/语句中检查bash中的退出代码?,bash,Bash,这就是我想做的: #!/bin/bash set -e # I can't remove this line! if [ docker inspect foo ]; then echo container is present else echo container is absent fi 可能吗docker inspect foo在容器不存在时返回退出代码1,在容器存在时返回退出代码0 现在我明白了: -bash: [: too many arguments 如果要在“If”语
#!/bin/bash
set -e # I can't remove this line!
if [ docker inspect foo ]; then
echo container is present
else
echo container is absent
fi
可能吗docker inspect foo
在容器不存在时返回退出代码1
,在容器存在时返回退出代码0
现在我明白了:
-bash: [: too many arguments
如果要在“If”语句中运行该命令,请执行以下操作:
if docker inspect foo
then
echo container is present
else
echo container is absent
fi
如果需要,可以省略所有换行符或用分号替换。这也将有助于:
if docker inspect foo; then echo container is present; else echo container is absent; fi
如果您想要更紧凑的内容,可以使用以下语法:
docker inspect foo && echo container is present
docker inspect foo || echo container is absent
docker inspect foo && echo container is present || echo container is absent
&&
如果第一个命令成功,则运行第二个命令<如果第一个命令失败,code>|将运行第二个命令。最后一行使用了两种形式。我不清楚这个问题。既然你的代码不是一行代码,你是在问如何把它写成一行代码吗?我要收回我的答案。我认为您根本无法做到这一点,因为每当运行返回非零状态的命令时“-e”会导致整个脚本退出。您说您不能删除set-e
行。是否允许您将set+e
放在下一行以关闭-e标志?警告:cmd1&&cmd2 | | cmd3
习惯用法与if cmd1;然后是cmd2;else-cmd3;fi
,因为如果cmd1
或cmd2
失败,它将执行cmd3
。如果第二个命令是回波,则不太可能(但可能);在其他情况下,这可能是一个问题。如果我想仅对特定的退出代码(例如1
或2
)回送容器,该怎么办?@DrSensor请参考此bash备忘单(或者如果您需要更多指导,可以开始一个新问题)。我想补充一点,如果docker inspect foo>/dev/null 2>&1不关心docker输出,您可以使用。