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

标签 linux bash shell

<分区>

我试图在脚本中测试 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 也被 $(...) 捕获,command substitution .

关于linux - 命令的输出未传递给分配的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37470552/

相关文章:

linux - 将多个文件名参数传递给 stat()?

linux - 哪个处理器将获取自旋锁?

regex - 如何在 Linux 中替换小数点

shell - 如何理解批处理文件?

c - EPIPE block 服务器

linux - 将 Hostname 命令的输出附加到/etc/hosts

bash - 从具有二进制模式字符串的文件中删除行

linux - 从文件 bash 工具中删除列

python - 将标准输出重定向到文件显示错误内容

linux - awk 命令修改文件中的列