Почему команда ниже не выходит? Вместо выхода цикл выполняется бесконечно.
В то время как я обнаружил это поведение с помощью более сложной настройки, простейшая форма команды сводится к следующему.
Не выходит:
while /usr/bin/true ; do echo "ok" | cat ; done | exit 1
Там нет опечаток выше. Каждый '|' это труба. «Выход 1» означает другой процесс, который запущен и завершен.
Я ожидаю, что "выход 1" вызовет SIGPIPE в цикле while (запись в канал без читателя) и разрыв цикла. Но цикл продолжает работать.
Почему команда не останавливается?