Я использую канал из нескольких команд в bash. Есть ли способ настроить bash для немедленного завершения всех команд во всем конвейере в случае сбоя одной из команд?
В моем случае первая команда, скажем, command1
, выполняется некоторое время, пока не выдав какой-то вывод. Например, вы можете заменить command1
на (sleep 5 && echo "Hello")
.
Теперь command1 | false
не удается выйти из строя через 5 секунд, но не сразу.
Такое поведение, по-видимому, имеет какое-то отношение к объему выходных данных, которые производит команда. Например, найти / | false
возвращается немедленно.
В общем, интересно, почему bash так себя ведет.Может ли кто-нибудь представить себе ситуацию, когда полезен такой код, как command1 | несуществующая-команда
не завершается сразу?
PS: Использование временных файлов для меня не вариант, так как промежуточные результаты, которые я перехожу, должны быть сохранены.
PPS: Ни set -e
, ни set -o pipefail
, по-видимому, не влияют на это явление.