2012-04-25 77 views
13

我试图将命令输出重定向到一个变量:重定向命令输出在bash变量失败

OUTPUT=$(sudo apache2ctl configtest) 

,然后来阅读:

echo $OUTPUT 

当运行它输出如下:

19:19:12 [email protected] ~ OUTPUT=$(sudo apache2ctl configtest) 
Syntax OK 
Syntax OK 

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

OUTPUT=$(ls -l) 

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

+0

通常的原因是来自其输出之间的空间=这不是真的你的情况? – ControlAltDel 2012-04-25 16:26:08

回答

27

也许输出到stderr而不是stdout

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

+0

就我个人而言,我发现更多解释性的答案http://stackoverflow.com/a/3130425/1504300 – reallynice 2014-03-27 09:08:02

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