Tôi đang sử dụng một đường ống của một số lệnh trong bash. Có cách nào để cấu hình bash để chấm dứt tất cả các lệnh trong toàn bộ đường ống ngay lập tức nên một trong các lệnh thất bại?Vỏ ống: Thoát ngay lập tức khi một lệnh không thành công
Trong trường hợp của tôi, lệnh đầu tiên, nói command1
, chạy một lúc cho đến khi nó tạo ra một số đầu ra. Ví dụ: bạn có thể thay thế command1
theo số (sleep 5 && echo "Hello")
.
Hiện tại, command1 | false
không thành công sau 5 giây nhưng không thành công ngay lập tức.
Hành vi này dường như có liên quan đến số lượng đầu ra mà lệnh tạo ra. Ví dụ: find/| false
trả về ngay lập tức.
Nói chung, tôi tự hỏi tại sao bash cư xử như thế này. Bất cứ ai có thể tưởng tượng bất kỳ tình huống mà nó là hữu ích mà mã như command1 | non-existing-command
không thoát ra cùng một lúc?
PS: Sử dụng tệp tạm thời không phải là một tùy chọn cho tôi, vì kết quả trung gian mà tôi sắp xếp sẽ lớn để được lưu trữ.
PPS: Không set -e
cũng không set -o pipefail
dường như ảnh hưởng đến hiện tượng này.
Câu hỏi này phù hợp hơn với http://unix.stackexchange.com. Có thể bạn sẽ nhận được câu trả lời hay ở đó. – dogbane