2012-01-09 39 views
3

我正在編寫一個Perl腳本來檢查並查看當前是否爲Apache安裝了一個模塊。在bash,我會用:如何在Perl中檢查已安裝的Apache模塊?

# 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" 
} 

中頻始終評估爲真,但。

關於我的配置:

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

+1。但爲什麼不使用'print'找到FCGI「if grep/fcgi /,qx(httpd -D DUMP_MODULES);'? – flesk 2012-01-09 07:08:50

+0

這兩個仍然輸出「語法OK」=(謝謝你回答! – graypay 2012-01-09 16:45:34

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" 
} 

這不是最漂亮的,但它做我所需要的。

謝謝那些看着它的人​​!