34

我正在尝试将命令输出重定向到一个变量:

OUTPUT=$(sudo apache2ctl configtest)

然后阅读它:

echo $OUTPUT

运行时输出如下:

19:19:12 user@user ~ OUTPUT=$(sudo apache2ctl configtest)
Syntax OK
Syntax OK

但变量保持空白。我已经对其他命令进行了同样的尝试,一切正常。

OUTPUT=$(ls -l)

这会将文件列表写入变量OUTPUT,以便稍后读取。我应该怎么做才能让它工作?

4

2 回答 2

63

也许输出去stderr,不是stdout吗?试试这个:

OUTPUT=$(sudo apache2ctl configtest 2>&1)
于 2012-04-25T16:26:07.857 回答
0

对于 nginx 可能的情况,当 configtest 可以成功但配置文件中有错误。例子:

nginx: [warn] conflicting server name "test.com" on 0.0.0.0:80, ignored
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

要正确检查 bash 脚本中的错误,需要使用:

if [[ $((sudo /sbin/service nginx configtest) 2>&1 | grep "failed\|warn" ) ]]; then
    echo "ERROR!!!"
else
    echo "OK!!!"
fi
于 2017-03-07T09:20:24.993 回答