Для следующего Баша заявления:Выход из трубы в Баше
tail -Fn0 /tmp/report | while [ 1 ]; do echo "pre"; exit; echo "past"; done
я получил «пред», но не вышел на Баш строку, а затем, если я что-то вход в/TMP/отчет, я мог бы бросить из этого скрипта и войдите в подсказку bash.
Я думаю, что это разумно. «exit» делает вывод «while» завершенным, но «хвост» все еще жив. Если что-то вводится в /tmp/report
, «хвост» будет выводиться на канал, тогда «хвост» обнаружит, что труба закрыта, а затем «хвост» завершает работу.
- Я прав? Если нет, кто-нибудь обеспечит правильную интерпретацию?
- Можно ли добавить что-либо в оператор «while», чтобы сразу выйти из всего заявления о трубе? Я знаю, что могу сохранить pid хвоста во временный файл, а затем прочитать этот файл в «while», а затем убить хвост. Есть ли более простой способ?
- Позвольте мне расширить свой вопрос. Если использовать этот хвост в файле сценария, можно ли одновременно выполнять следующие пункты? a. Если вводится Ctrl-C или сигнализируется основной процесс оболочки, основная оболочка и различные подоболочки и фоновые процессы, порожденные основной оболочкой, завершатся b. Я мог бы выйти из хвоста, пока только в случае триггера, и сохранить другие подпроцессы, продолжая работать c. Лучше не использовать временный файл или файл трубы.
Возможный дубликат [Невозможно завершить оболочку с помощью Ctrl + c] (http://stackoverflow.com/questions/20533745/cannot-terminate-a-shell-with-ctrlc) – shellter