检查nginx配置测试是否成功,作为bash的条件,如果

检查nginx配置测试是否成功,作为bash的条件,如果,bash,nginx,Bash,Nginx,我想使用nginx-t作为bash脚本的条件来检查nginx配置的有效性 if [[ $(nginx -t) = *"successful"* ]]; then echo "success"; else echo "failure"; fi 当nginx-t的输出包含successful时,bash打印failure。我做错了什么 编辑:我不想按退出代码检查,而是按字符串输出检查 解决方案: if [[ $(nginx -t

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

if [[ $(nginx -t) = *"successful"* ]]; then 
echo "success"; 
else 
echo "failure"; 
fi
nginx-t
的输出包含
successful
时,bash打印
failure
。我做错了什么

编辑:我不想按退出代码检查,而是按字符串输出检查

解决方案:

if [[ $(nginx -t 2>&1) = *"successful"* ]]; then 
echo "success"; 
else 
echo "failure"; 
fi
```
下面是我的(工作)脚本,以执行相同的操作:

nginx -t >/dev/null 2>&1
if [ $? -eq 0 ]; then
    echo "success"
else
    echo "failure"
fi
我做错了什么

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

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

if out=$(nginx -t 2>&1); do
    echo "success"
else
    echo "failure, because: $out"
fi

谢谢,虽然这会起作用,但我不想使用命令的退出状态,因为如果我想引入错误处理,这可能会进一步证明是有问题的,因为它忽略了输出的信息。
因为如果我想引入错误处理,这可能会进一步证明是有问题的。
我不理解。处理退出状态是错误处理。@IvanShatsky do
cmd;如果[$?…
是一种反模式。不要这样做-如果可能,不要使用
$?
。只要
如果nginx-t>/dev/null 2>&1;那么…
@KamilCuksaying erro handling意味着我想根据nginx错误字符串的信息做一些事情。一些退出代码不包含这些信息,jhi不知道stderr。但是我不想检查退出状态。我想按输出字符串的内容进行保存。基本上只是将
nginx-t
替换为
nginx-t2>&1