※ ChatGPTを利用し、要約された質問です(原文:パイプをopenして/usr/bin/grepを実行する方法)
パイプをopenして/usr/bin/grepを実行する方法
このQ&Aのポイント
子プロセスでopenして標準出力から/usr/bin/grepの実行結果を取得する方法を知りたい
open関数の戻り値で子プロセスが起動しているかどうかを判断し、起動している場合にはgrepを実行する
/usr/bin/grepの第二引数に何を指定するべきか迷っている
パイプをopenして/usr/bin/grepを実行する方法
子プロセスで"-|"でopenして、そこに標準出力で/usr/bin/grepの実行結果を出力し、そのデータを取得したいです。
$pid = open(FIFO, "-|")をした時点で、$pidにはプロセスIDが入っています(0以外)。
0のときは子プロセスが起動しているのでgrepを実行し、0以外であれば標準出力の内容を取得するというロジックでいいと考えたのですが、一度もgrepが実行されません。
また、grepをexecしているのですが、その第二引数を何にしていいのかも模索中です。
どこをどのように修正したらいいでしょうか。
よろしくお願いします。
die "openエラー: $!" unless defined ($pid = open(FIFO, "-|"));
if(!$pid) {
exec('/usr/bin/grep', '-isl', $search, @list) or die "grepエラー: $!";
} else {
while (<FIFO>) {
print $_;
}
close FIFO;
}
【環境】
WindowsXP Professional(SP2)
Apache2.2
ActivePerl v5.8.8
お礼
ご回答ありがとうございます。 画面で操作して結果を見ているので、openのエラーをうまく拾えていないのかもしれません。そこはログを見てみようと思います。 最終的にはUnix上で動かすので、そのあたりも加味して、IPC::open2、IPC::open3も含めもう一度見直してみようと思います。