この最小限の例を考えると
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; )
それを出力LINE 1
し、その後、1秒後に、出力はLINE 2
、として期待されます。
これをパイプすると grep LINE
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE
振る舞いは前のケースと同じで、予想通りです。
あるいは、これを cat
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | cat
ふるまいは予想通り同じです。
ただし、にパイプしてからgrep LINE
にパイプするとcat
、
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE | cat
1秒が経過するまで出力はなく、両方の行がすぐに出力に表示されますが、これは予期していませんでした。
なぜこれが起こっているのですか?最後のバージョンを最初の3つのコマンドと同じように動作させるにはどうすればよいですか?
cat
単に読み取りstdin
、出力しstdout
ます。もちろん、私の代わりに複雑な多くのもので、この質問を思い付いたecho
とcat
、これらはアップはるかに簡単な例で問題ショー以来、無関係であることが判明します。
cat
ファイルを連結します。パイピングで何をしようとしていcat
ますか?