あるスクリプトの出力を取得し、この入力をgrepにパイプし、grepの出力を別のスクリプトにパイプします。
./script1 | grep 'expr' | ./script2
しかし、2番目のスクリプトは入力をまったく受け取りません。同様に、script2
withcat
とscript1
withを置き換えても何も印刷されませんping
。
ping localhost | grep localhost | cat
grep
私が次のように変更した場合awk
:
ping localhost|awk '{print $1}'|cat
どうしたの?
ベストアンサー1
grep
バッファリングです(出力が端末ではないと判断するためです。厳密に言えば、これはCライブラリの動作です)。
この機能を無効にするには、次を実行しますunbuffer -p
(標準入力からデータを読み取る必要があり-p
ます).unbuffer
ping localhost | unbuffer -p grep localhost | cat
または、grep
行ごとのバッファリングを指定します(サポートされている場合)。
ping localhost | grep --line-buffered localhost | cat