如何在Perl中检查已安装的Apache模块?

3

我正在编写一个用Perl语言编写的脚本,以检查Apache是否已安装了一个模块。在Bash中,我会使用以下命令:

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

如果该模块存在,我希望它返回TRUE,如果不存在,则返回FALSE。但是,我遇到了一个问题,因为httpd -M总是输出“Syntax OK。”。
以下是我目前的代码:
#!/usr/bin/perl
my $FCGID = "";
if (`httpd -M | grep fcgid`) {
$FCGID = "enabled"
} else {
$FCGID = "disabled"
}

IF语句始终被视为真。

关于我的配置:

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脚本也不是很熟悉。

2个回答

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

1
+1。但为什么不使用 print "FCGI found" if grep /fcgi/, qx(httpd -D DUMP_MODULES); - flesk
这两个仍然输出“语法正确”=( 谢谢回答! - graypay

0
原来我只需要重定向输出,我对如何做到这一点感到困惑。
$ 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"
}

它不是最漂亮的,但它做我需要的事情。

感谢那些研究它的人!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接