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

时间:2012-01-09 05:51:49

标签: linux perl apache bash centos

我正在编写一个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 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分: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"
}

这不是最漂亮的,但它确实符合我的需要。

感谢那些调查过的人!