无法捕获“/bin/sh”的退出代码
Unable to capture the exit code of `/bin/sh`
我正在使用 /bin/bash
作为最外层的 shell,并且我正在使用来自 busybox
.
的默认 /bin/sh
下面,我能够如我所料捕获退出代码:
$ 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
你看到这个是因为变量扩展在命令执行之前完成。尝试转义 $?:
docker run -it --rm busybox /bin/sh -c "bin/sh -c \"cat /foo/bar\" || echo Shell Result: $?" || echo Docker Result: $?
或者,如果您的命令中不需要任何其他变量扩展,只需使用单引号(那么您也不需要转义内引号):
docker run -it --rm busybox /bin/sh -c 'bin/sh -c "cat /foo/bar" || echo Shell Result: $?' || echo Docker Result: $?
我正在使用 /bin/bash
作为最外层的 shell,并且我正在使用来自 busybox
.
/bin/sh
下面,我能够如我所料捕获退出代码:
$ 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
你看到这个是因为变量扩展在命令执行之前完成。尝试转义 $?:
docker run -it --rm busybox /bin/sh -c "bin/sh -c \"cat /foo/bar\" || echo Shell Result: $?" || echo Docker Result: $?
或者,如果您的命令中不需要任何其他变量扩展,只需使用单引号(那么您也不需要转义内引号):
docker run -it --rm busybox /bin/sh -c 'bin/sh -c "cat /foo/bar" || echo Shell Result: $?' || echo Docker Result: $?