捕获变量的输出仅适用于重定向


我知道捕获变量stdout的构造是var=$(...)。但是,为什么以下内容不起作用?
docker pull nginx
version=$(docker run --rm --entrypoint nginx nginx:latest -version)
echo $version

然而,我发现,在上面的第二行中添加2>&1可以使事情正常进行,即:

version=$(docker run --rm --entrypoint nginx nginx:latest -version 2>&1)

有人能帮我解释一下为什么在这种情况下我们需要添加额外的重定向吗?

这不是因为docker。它需要搜索NGINX方面。看起来NGINX版本打印参数sysout不成功。这就是为什么您需要将ERROR也重定向到OUTPUT。

注意:如果在主机上执行以下命令,则会出现同样的问题。

~# nginx -v
nginx version: nginx/1.14.2
~# aa=$(nginx  -v)
nginx version: nginx/1.14.2
~# echo $aa
~#

对于Apache来说,它运行良好。

最新更新