Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一行/语句中检查bash中的退出代码?_Bash - Fatal编程技术网

如何在一行/语句中检查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输出,您可以使用