2012-04-25 116 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