【问题标题】:How do I check an installed Apache module in Perl?如何在 Perl 中检查已安装的 Apache 模块?
【发布时间】:2012-02-05 18:01:49
【问题描述】:

我正在编写一个 Perl 脚本来检查当前是否为 Apache 安装了一个模块。在 Bash 中,我会使用:

# httpd -M | grep fcgid
Syntax OK
fcgid_module (shared)

如果该模块存在,我希望它返回值 TRUE,如果不存在,则返回 FALSE。我遇到了一个问题,因为 httpd -M 总是输出“语法正常”。

这是我到目前为止所得到的:

#!/usr/bin/perl
my $FCGID = "";
if (`httpd -M | grep fcgid`) {
$FCGID = "enabled"
} else {
$FCGID = "disabled"
}

尽管如此,IF 始终评估为 true。

关于我的配置:

x86_64 GNU/Linux
# cat /etc/redhat-release
CentOS release 6.2 (Final)
# httpd -v
Server version: Apache/2.2.15 (Unix)
# perl -v
This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi

接受建议。我是 Perl 的新手,但在 Bash 脚本方面还是个新手。

【问题讨论】:

    标签: linux perl apache bash centos


    【解决方案1】:

    原来我只需要重定向输出,我对如何做到这一点感到困惑。

    $ httpd -M 2> /dev/null | grep fcgid_module
    fcgid_module (shared)
    

    所以在 PERL 中,我可以评估那个 BASH 表达式并将其保存到一个变量中,然后在 IF 语句中针对该变量进行测试。

    my $FCGI = "";
    my $FCGI_mod = `httpd -M 2> /dev/null | grep fcgid_module`;
    if ( $FCGI_mod eq "" ) {
    $FCGI = "disabled"
    } else {
    $FCGI = "enabled"
    }
    

    它不是最漂亮的,但它可以满足我的需要。

    感谢那些调查它的人!

    【讨论】:

      【解决方案2】:
      perl 2>/dev/null -le 'my @list = qx(httpd -D DUMP_MODULES ); print "FCGI found" if ( grep { $_ =~ /fcgi/ } @list )  '
      

      【讨论】:

      • +1。但是为什么不使用print "FCGI found" if grep /fcgi/, qx(httpd -D DUMP_MODULES);呢?
      • 这两个仍然输出 "Syntax OK" =( 感谢您的回答!
      猜你喜欢
      • 1970-01-01
      • 2011-07-16
      • 2021-01-04
      • 2012-03-09
      • 2010-10-22
      • 2012-05-10
      • 1970-01-01
      • 2012-03-18
      • 2010-09-13
      相关资源
      最近更新 更多