0

我想nginx -t使用它作为 bash 脚本的条件来检查我的 nginx 配置的有效性。

if [[ $(nginx -t) = *"successful"* ]]; then 
echo "success"; 
else 
echo "failure"; 
fi

虽然nginx -tcontains的输出successful,但 bashfailure无论如何都会打印。我究竟做错了什么?

编辑:我不想通过退出代码而是通过字符串输出来检查。

解决方案:

if [[ $(nginx -t 2>&1) = *"successful"* ]]; then 
echo "success"; 
else 
echo "failure"; 
fi
```
4

2 回答 2

1

这是我的(工作)脚本来做同样的事情:

nginx -t >/dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "success"
else
    echo "failure"
fi
于 2021-04-25T11:27:41.087 回答
0

我究竟做错了什么?

您期望将消息打印在标准输出上。它打印在 stderr 上。将 stderr 重定向到 stdout 以捕获消息。

如果要捕获命令的 stderr 和 stdout 并检查它的退出状态,请执行以下操作:

if out=$(nginx -t 2>&1); do
    echo "success"
else
    echo "failure, because: $out"
fi
于 2021-04-25T11:54:33.083 回答