Redirecting command output to a variable in bash fails

那年仲夏 提交于 2019-12-28 13:43:31

问题


I'm trying to redirect command output to a variable:

OUTPUT=$(sudo apache2ctl configtest)

and then to read it:

echo $OUTPUT

When running it the output is the following:

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

But the variable stays blank. I've tried the same for other commands and everything works fine.

OUTPUT=$(ls -l)

This writes file list to variable OUTPUT so that it can be read later. What should i do to make it work?


回答1:


maybe the output goes to stderr, not stdout?

try this: OUTPUT=$(sudo apache2ctl configtest 2>&1)




回答2:


For nginx possible situation when configtest can be successful with error in config files. Example:

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

for correct check errors in bash scripts need use:

if [[ $((sudo /sbin/service nginx configtest) 2>&1 | grep "failed\|warn" ) ]]; then
    echo "ERROR!!!"
else
    echo "OK!!!"
fi


来源:https://stackoverflow.com/questions/10319745/redirecting-command-output-to-a-variable-in-bash-fails

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!