我需要在bash脚本中检查apachectl configtest
的输出,如果一切正常而不向屏幕输出命令,则重新启动。
var =sudo apachectl configtest
如果 var 包含 "Syntax OK" 则
sudo apachectl graceful
如何做?
我知道这是旧帖子,问题不适合在该特定网站上提问。无论如何,当我搜索相同的问题时,这个页面显示为第一个搜索结果。因此,我在这里发布我的最终解决方案,供参考。
configtestResult=$(sudo apachectl configtest 2>&1)
if [ "$configtestResult" != "Syntax OK" ]; then
echo "apachectl configtest returned the error: $configtestResult";
exit 1;
else
sudo apachectl graceful
fi
这个主题包含一个提示,有关捕获configtest输出的。
apachectl configtest
写入 stderr。var1
没有捕获任何内容。 - Dale C. Anderson你需要的第一条命令中使用的 bash 语法可能是 "命令替换":
VAR=$(sudo apachectl configtest)
VAR 将包含命令行的输出。
但是,如果你只想知道输出是否包含 "Syntax OK",可以这样做:
sudo apachectl configtest | grep -q "Syntax OK" && proceed || handle-error
其中 proceed
和 handle-error
是分别处理正常和错误情况的函数。
(注意 grep 的 -q 选项以隐藏 apachectl 命令的输出。)
apachectl configtest 2>&1
的输出重定向,proceed
就永远不会被执行。此外,如果 proceed
执行出现错误,handle-error
也会被执行,而这可能并非你想要的。 - Dale C. Anderson
>
将命令输出保存到文件中,如下所示:[command] > [filepath]
。 - ifconfigapachectl graceful
在重新启动之前会自动运行configtest。 - Steve Trout