我正在使用/bin/bash
作为最 shell ,我使用默认的 /bin/sh
来自busybox
.
下面,我能够按照预期捕获退出代码:
$ docker run -it --rm busybox /bin/sh -c "bin/sh -c \"cat /foo/bar\" && echo Shell Result: $?" || echo Docker Result: $?
cat: can't open '/foo/bar': No such file or directory
Docker Result: 1
显然cat /foo/bar
失败了,这就是我们在||
另一边输入语句的方式。但是,当我尝试回显结果 $?
的值时是 0
(如下所示):
$ docker run -it --rm busybox /bin/sh -c "bin/sh -c \"cat /foo/bar\" || echo Shell Result: $?" || echo Docker Result: $?
cat: can't open '/foo/bar': No such file or directory
Shell Result: 0
结果存储在哪里,或者如何捕获它?
最佳答案
变量在双引号中扩展。这也适用于 $?
。
$ true; /bin/sh -c "cat /foo/bar || echo Result: $?"
cat: /foo/bar: No such file or directory
Result: 0
$ false; /bin/sh -c "cat /foo/bar || echo Result: $?"
cat: /foo/bar: No such file or directory
Result: 1
解决方案:使用单引号或转义$
:
$ true; /bin/sh -c 'cat /foo/bar || echo Result: $?'
cat: /foo/bar: No such file or directory
Result: 1
$ true; /bin/sh -c "cat /foo/bar || echo Result: \$?"
cat: /foo/bar: No such file or directory
Result: 1
关于bash - 无法捕获 `/bin/sh`的退出代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48289127/