• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パイプをopenして/usr/bin/grepを実行する方法)

パイプをopenして/usr/bin/grepを実行する方法

このQ&Aのポイント
  • 子プロセスでopenして標準出力から/usr/bin/grepの実行結果を取得する方法を知りたい
  • open関数の戻り値で子プロセスが起動しているかどうかを判断し、起動している場合にはgrepを実行する
  • /usr/bin/grepの第二引数に何を指定するべきか迷っている

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

質問の例では双方向のやり取りは必要ないので、 #1の tacosan さんの回答の通りで open my $fd, "grep -isl '$search' @list"or die $!; とでもすればよいのではないかと。 ついでにいうと、このパターンの場合、Unixのような fork & exec が必要なので、ActivePerlでは 期待通りに動きません。 というかopenのところで '-' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 となると思うんですが。 ついでのついでで、三引数バージョンの open ならActivePerlでもいけます。 open my $fifo, "-|", 'grep -e use *.pl' or die; #open(my $fifo, '-|') || exec 'grep', '-e', 'use', '*.pl'; #↑こっちはダメ while (<$fifo>) { print; } もし Perlの標準出力からデータを送る→ プログラムで処理してその標準出力に送る→ Perlで受け取る ということをやりたいのなら、 IPC::open2 とか IPC::open3 とかつかってください。

cieux
質問者

お礼

ご回答ありがとうございます。 画面で操作して結果を見ているので、openのエラーをうまく拾えていないのかもしれません。そこはログを見てみようと思います。 最終的にはUnix上で動かすので、そのあたりも加味して、IPC::open2、IPC::open3も含めもう一度見直してみようと思います。

すると、全ての回答が全文表示されます。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

事情はわからないんですけど, open で直接 grep してはいけないんでしょうか?

cieux
質問者

お礼

回答ありがとうございます。 できるだけ元のソースを活かそうと思ったので、このようになっています。 状況としては、直接grepしても問題ないと思います(が、自信ありません…)。

すると、全ての回答が全文表示されます。

関連するQ&A