在任何地方都找不到这个,包括在这个论坛上。似乎很奇怪以前没有人遇到过同样的需求。这应该有一个非常简单的答案。
尝试将httpd -t
输出放入 shell 脚本变量中。已经尝试了我所知道的所有可能的选项。例如:
r=`httpd -t` or r=$(httpd -t)
甚至尝试过:
for i in `httpd -t`
任何其他“正常”shell 命令(例如date
或ls
等)都可以工作,但我无法将这个简单的输出放入变量中 - 无论输出是错误、警告还是仅仅是“语法 OK”。
本质上我只是想要一个 shell 脚本来确保在重新启动服务器之前对 httpd 配置的任何程序化编辑都没有搞砸配置。我不相信使用 shell 脚本无法做到这一点......
谢谢。
答案1
如果我没记错的话(我现在面前没有安装 Apache 的机器),该命令的输出文本将是stderr
,而不是stdout
。您需要重定向输出才能捕获它,如下所示:
r=$(httpd -t 2>&1)
以上将收集stdout
和stderr
输出。如果你只想要stderr
没有stdout
,你需要做这样的事情:
r=$(httpd -t 2>&1 > /dev/null)
但是,您实际上并不需要文本输出来执行您想要的操作。如果您只需要知道是否有错误,则只需检查返回代码即可。如果配置没有错误,它将返回 0,如果有错误,它将返回其他数字。从man
页面httpd
:
仅对配置文件运行语法测试。程序在这些语法解析测试之后立即退出,返回代码为 0(语法正常)或返回代码不等于 0(语法错误)。