Diberikan contoh minimal ini
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; )
itu menghasilkan LINE 1
dan kemudian, setelah satu detik, menghasilkan LINE 2
, seperti yang diharapkan .
Jika kita menyalurkan ini ke grep LINE
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE
perilakunya sama seperti dalam kasus sebelumnya, seperti yang diharapkan .
Jika, sebagai alternatif, kami pipa ini ke cat
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | cat
sekali lagi tingkah lakunya sama, seperti yang diharapkan .
Namun , jika kita menyalurkan ke grep LINE
, dan kemudian ke cat
,
( echo "LINE 1" ; sleep 1 ; echo "LINE 2" ; ) | grep LINE | cat
tidak ada output sampai satu detik berlalu, dan kedua garis segera muncul pada output, yang tidak saya harapkan .
Mengapa ini terjadi dan bagaimana saya bisa membuat versi terakhir untuk berperilaku dengan cara yang sama seperti tiga perintah pertama?
cat
cukup membaca stdin
dan menghasilkan stdout
. Tentu saja, saya datang dengan pertanyaan ini dengan banyak hal rumit di tempat echo
dan cat
, tetapi ini ternyata tidak relevan, karena masalah muncul dengan contoh yang jauh lebih sederhana.
cat
menggabungkan file. Apa yang ingin Anda lakukan dengan menyalurkancat
?