通过 apachectl -S 的结果进行 grepping

通过 apachectl -S 的结果进行 grepping

我有一台大约有 300 个虚拟主机的服务器。当我想确保特定的 httpd.conf 文件已加载到虚拟主机配置中并且语法正确时,我会运行apachectl -S。但问题是,我得到了大量的输出。

我曾尝试apacectl -S | grep 'foo'并使apachectl -S > foo.txt这些数据更易于管理,但命令的输出不利于 grepping 或推送到文本文件中。

当我尝试时apachectl -S | grep 'foo',它只是返回整个输出apachectl -S

当我尝试时apachectl -S > foo.txt,foo.txt 是一个空文件。

这可能与服务器的配置方式有关,因为我能够在本地机器上成功执行 grep。

有什么建议么?

答案1

apachectl 的输出被发送到 stderr。您使用的命令试图过滤 stdout。要以您描述的方式使用 grep,请将 stderr 重定向到 stdout,如下所示:

apachectl -S 2>&1 | grep 'blah'

答案2

哈哈,看起来这个问题已经在 Stack Overflow 上得到回答了:

https://stackoverflow.com/questions/6505932/how-to-filter-apache-virtual-host-listing-using-grep

因为apachectl -S(实际上是的包装器httpd -S)通过 STDERR 发送其输出,所以我需要将 STDERR 重定向到 STDOUT,然后对其进行 grep。

apachectl -S 2>&1 | grep 'foo'

谢谢,SO!

相关内容