从 shell 脚本中检查 httpd 语法

从 shell 脚本中检查 httpd 语法

在任何地方都找不到这个,包括在这个论坛上。似乎很奇怪以前没有人遇到过同样的需求。这应该有一个非常简单的答案。

尝试将httpd -t输出放入 shell 脚本变量中。已经尝试了我所知道的所有可能的选项。例如:

r=`httpd -t` or r=$(httpd -t)

甚至尝试过:

for i in `httpd -t`

任何其他“正常”shell 命令(例如datels等)都可以工作,但我无法将这个简单的输出放入变量中 - 无论输出是错误、警告还是仅仅是“语法 OK”。

本质上我只是想要一个 shell 脚本来确保在重新启动服务器之前对 httpd 配置的任何程序化编辑都没有搞砸配置。我不相信使用 shell 脚本无法做到这一点......

谢谢。

答案1

如果我没记错的话(我现在面前没有安装 Apache 的机器),该命令的输出文本将是stderr,而不是stdout。您需要重定向输出才能捕获它,如下所示:

r=$(httpd -t 2>&1)

以上将收集stdoutstderr输出。如果你只想要stderr没有stdout,你需要做这样的事情:

r=$(httpd -t 2>&1 > /dev/null)

但是,您实际上并不需要文本输出来执行您想要的操作。如果您只需要知道是否有错误,则只需检查返回代码即可。如果配置没有错误,它将返回 0,如果有错误,它将返回其他数字。从man页面httpd

仅对配置文件运行语法测试。程序在这些语法解析测试之后立即退出,返回代码为 0(语法正常)或返回代码不等于 0(语法错误)。

相关内容