问题
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