$ cat test.pl
my $pid = 5892;
my $not = system("top -H -p $pid -n 1 | grep myprocess | wc -l");
print "not = $not\n";
$ Perl test.pl
11
not = 0
$
結果をキャプチャしたい、つまり11
を変数に入れます。どうやってやるの?
Perlfaq8 から:
system() と backticks ( ``)の目的を混同しています。 system()は、コマンドを実行し、終了ステータス情報を返します(16ビット値として:下位7ビットはプロセスが停止したシグナルであり、上位8ビットは実際の終了値です)。バックティック( ``)はコマンドを実行し、STDOUTに送信したものを返します。
$exit_status = system("mail-users");
$output_string = `ls`;
Perlから外部コマンドを実行するには多くの方法があります。最も一般的な意味は次のとおりです。
外部コマンドからSTDERRをキャプチャする方法は? も参照してください。
最も簡単な方法は、``
Perlの機能。これは中にあるものを実行し、出力されたものを標準出力に返します:
my $pid = 5892;
my $var = `top -H -p $pid -n 1 | grep myprocess | wc -l`;
print "not = $var\n";
これでうまくいくはずです。
バックティックではなくqx{command}
を使用してみてください。私にとっては、SQLを実行でき、引用符などのエスケープを心配する必要がないため、少し改善されています。エディターと画面にもよりますが、私の古い目は小さなバックティックを逃す傾向があり、アングルブラケットとグロブを使用するようなオーバーロードの問題はありません。
backtick
またはqx
を使用すると、すべての回答に感謝します。ただし、backtick
またはqx
を使用する場合、出力には末尾の改行が含まれているため、削除する必要があることがわかりました。そこで、chomp
を使用しました。
chomp($Host = `hostname`);
chomp($domain = `domainname`);
$fqdn = $Host.".".$domain;
詳細はこちら: http://irouble.blogspot.in/2011/04/Perl-chomp-backticks.html
システム変数にbacktickを使用すると、結果をPerl変数に保存できます。
私の$ pid = 5892; my $ not = `` top -H -p $ pid -n 1 | grep myprocess | wc -l`; print "not = $ not\n";