この最小限の例を考えると
( 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ますか?