Tại sao lệnh dưới đây không thoát? Thay vì thoát ra, vòng lặp chạy vô thời hạn.
Trong khi tôi phát hiện ra hành vi này bằng cách sử dụng một thiết lập phức tạp hơn, hình thức đơn giản nhất của lệnh sẽ giảm xuống như sau.
Không thoát:
while /usr/bin/true ; do echo "ok" | cat ; done | exit 1
Không có lỗi chính tả ở trên. Mỗi '|' là một đường ống. 'Lối ra 1' là viết tắt của một quá trình khác đã chạy và thoát.
Tôi hy vọng "lối ra 1" sẽ gây ra SIGPIPE trên vòng lặp while (ghi trên đường ống không có đầu đọc) và để vòng lặp thoát ra. Nhưng, vòng lặp tiếp tục chạy.
Tại sao lệnh không dừng lại?