命令的输出未传递给分配的变量



我试图在脚本中测试nginx配置:

reply="$(nginx -t)"
echo $reply 

但$reply不包含返回的文本。如果我将第一行放在终端中,nginx 文本会在终端中弹出,但是如果我将第二行放在终端中,则没有任何输出。我的兴趣是在 if 语句中使用该 nginx 测试的输出

reply="$(nginx -t)"
    if [[ ${reply} == *"nginx: configuration file /etc/nginx/nginx.conf test failed"* ]]
    then
            echo "It's there!";
    fi

有没有办法获取变量中命令nginx -t返回的输出?

从您的条件来看,您正在测试错误消息,这意味着nginx很可能将其打印到 stderr,而$(...)默认情况下仅捕获 stdout 输出。

要捕获这两个流,请使用:

reply="$(nginx -t 2>&1)"

2>&1 将 stderr 重定向到 stdout,这样 stderr 也被命令替换$(...)捕获。

相关内容

  • 没有找到相关文章

最新更新