将命令输出重定向到bash中的变量失败

时间:2012-04-25 16:22:47

标签: linux apache bash shell terminal

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

OUTPUT=$(sudo apache2ctl configtest)

然后阅读它:

echo $OUTPUT

运行时输出如下:

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

但变量保持空白。我已经尝试过相同的其他命令,一切正常。

OUTPUT=$(ls -l)

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

2 个答案:

答案 0 :(得分:36)

也许输出转到stderr,而不是stdout

试试这个:OUTPUT=$(sudo apache2ctl configtest 2>&1)

答案 1 :(得分: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