我正在尝试将命令输出重定向到变量:
OUTPUT=$(sudo apache2ctl configtest)
然后阅读它:
echo $OUTPUT
运行时输出如下:
19:19:12 user@user ~ OUTPUT=$(sudo apache2ctl configtest)
Syntax OK
Syntax OK
但变量保持空白。我已经对其他命令进行了相同的尝试,一切正常。
OUTPUT=$(ls -l)
这会将文件列表写入变量
OUTPUT
,以便稍后读取。
我应该怎么做才能让它发挥作用?
也许输出会转到
stderr
,而不是 stdout
?试试这个:
OUTPUT="$(sudo apache2ctl configtest 2>&1)"
对于 nginx 可能出现的情况,配置测试可以成功,但配置文件中有错误。 示例:
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
输出=
sudo apache2ctl configtest
回显$输出