2012-01-09 10 views
3

Apache用のモジュールが現在インストールされているかどうかを確認するためのPerlスクリプトを書いています。バッシュでは、私が使用します。インストール済みのApacheモジュールをPerlでチェックするにはどうすればよいですか?

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

を、私はそれがない場合、そのモジュールが存在し、FALSEならば、これはTRUEの値を返すようにしたいです。私は問題に遭遇しています。なぜなら、httpd -Mは常に「構文OK」を出力するからです。

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

IFは常にかかわらず、trueとして評価されます。ここでは

は、私がこれまでに得た」VEのものです。私の設定について

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は" grep/fcgi /、qx(httpd -D DUMP_MODULES); – flesk

+0

これらの両方とも、まだ「構文OK」=(お返事ありがとうございます! – 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" 
} 

私はそれが私に必要なものです。

ご覧いただきありがとうございます。

関連する問題