以下のコードにp00
は、で作成された名前付きパイプがありmkfifo p00
ます。
コンソール1で、次のコマンドを実行しました。
% perl -ne 'print "PERL: $_"' < p00
次に、上記が(予想どおりに)ブロックされている間に、コンソール2で実行しました
% seq 3 > p00
その結果、コンソール1に次のように表示されました。
PERL: 1
PERL: 2
PERL: 3
%
これは、3行目を印刷した後にスクリプトが終了したという事実を除いて、私が達成したいと思っていた結果とほぼ同じでした。perl
スクリプトは、行が利用可能になるとすぐに(接頭辞「PERL:」で始まる)行をエコーし続け、それ以外の場合はブロックするようにします。
上記のワンライナーの次のバリエーションは、表面的には目的の動作に似ています。
perl -e 'while ( 1 ) { print "PERL: $_" while <>; sleep 1 }' < p00
...しかし、入力を待っている間はブロックせず、入力が利用可能になるとすぐにエコーするため、これは実際の取引ではありません。
ノート:
- この質問の背後にある動機は教育(つまり私のもの)であり、それ以上のものではありません。私は実際的な問題を解決しようとはしていません。私はもっとperl(そしてunix)を学ぼうとしています。
- この質問がunix.se.comに適しているかどうかはわかりませんでした。もしそうなら、私はそれをそこに再投稿することをとてもうれしく思います。私に知らせて。