Masalah ini telah mengganggu saya selama bertahun-tahun. Terima kasih kepada jilliagre untuk dorongan ke arah yang benar.
Mengulang sedikit pertanyaan, pada kotak linux saya, ini berhenti seperti yang diharapkan:
while true ; do echo "ok"; done | head
Tetapi jika saya menambahkan pipa, itu tidak berhenti seperti yang diharapkan:
while true ; do echo "ok" | cat; done | head
Itu membuat saya frustrasi selama bertahun-tahun. Dengan mempertimbangkan jawaban yang ditulis oleh jilliagre, saya menemukan perbaikan yang luar biasa ini:
while true ; do echo "ok" | cat || exit; done | head
QED ...
Ya tidak cukup. Ini sesuatu yang sedikit lebih rumit:
i=0
while true; do
i=`expr $i + 1`
echo "$i" | grep '0$' || exit
done | head
Ini tidak berfungsi dengan baik. Saya menambahkan || exit
sehingga ia tahu bagaimana cara mengakhiri lebih awal, tetapi yang pertama echo
tidak cocok dengan grep
begitu loop berhenti segera. Dalam hal ini, Anda benar-benar tidak tertarik pada status keluar dari grep
. Pekerjaan saya adalah menambahkan yang lain cat
. Jadi, berikut ini skrip yang dibuat yang disebut "puluhan":
#!/bin/bash
i=0
while true; do
i=`expr $i + 1`
echo "$i" | grep '0$' | cat || exit
done
Ini benar berakhir ketika dijalankan sebagai tens | head
. Terima kasih Tuhan.