p00
のコードでは、mkfifo p00
で作成された名前付きパイプです。利用可能な場合は、stdinから行を読み込む方法(そうでない場合はブロックする)?
は、コンソール1において、Iは走っ:
% perl -ne 'print "PERL: $_"' < p00
そして、一方、上記Iは結果
% seq 3 > p00
を実行したコンソール2に、(予想通り)ブロックされ、コンソールに登場以下1:
PERL: 1
PERL: 2
PERL: 3
%
これは、私がホップを持っていたほとんど結果でした第3行を印刷した後にperl
スクリプトが終了したという点を除いて、達成するために実行されました。
私は、スクリプトが(「PERL:」で始まる)ラインエコー続けたいそうでないとすぐに、彼らが利用可能になるとしてを、そしてブロック。
ワンライナーの次の変異体は、上記表面的に希望の動作に似ている:
perl -e 'while (1) { print "PERL: $_" while <>; sleep 1 }' < p00
を...しかし、入力を待っている間に、それはブロックされませんので、それは、本物ではありません、それが利用可能になるとすぐに入力をエコーしません。
NOTES:
- この質問の背後にある動機は、教育(鉱山、つまり)との何物でもあり、実際の問題を解決しようとはしていません。私はもっと多くのperl(とunix)を学ぼうとしています。
- この質問がunix.se.comに適しているかどうかはわかりませんでした。それがあれば私はそこにそれを再投稿するよりも嬉しいです。私に知らせて。
これは 'fifo'が動作する方法です:ライターがそれを閉じると、リーダーは' EOF'を取得します。読者はおそらく 'fifo'を再オープンする必要がありますが、シェルのリダイレクトではできません。 –
@MaximYegorushkin:あなたのコメントは、私がしなければならなかったことが、「睡眠1」を取り除くことでした!その後、私が投稿した第2のバージョンは、まさに私が望むものです。ありがとう! – kjo