Для следующего оператора bash:
tail -Fn0 /tmp/report | while [ 1 ]; do echo "pre"; exit; echo "past"; done
Я получил «pre», но не вышел в командную строку bash, тогда, если я введу что-то в /tmp/report, я смогу выйти из этого скрипта и попасть в командную строку bash.
Я думаю, это разумно. «выход» заставляет оператор «пока» выйти, но «хвост» все еще жив. Если что-то вводится в /tmp/report
, «хвост» будет выводиться в канал, затем «хвост» обнаружит, что канал закрыт, затем «хвост» выйдет.
- Я прав? Если нет, может ли кто-нибудь дать правильную интерпретацию?
- Можно ли добавить что-нибудь в оператор while, чтобы немедленно выйти из всего оператора канала? Я знаю, что могу сохранить pid хвоста во временный файл, затем прочитать этот файл в «пока», а затем убить хвост. Есть ли более простой способ?
- Позвольте мне расширить свой вопрос. Если использовать этот хвост в файле скрипта, можно ли выполнить следующие пункты одновременно? а. Если нажать Ctrl-C или подать сигнал главному процессу оболочки, основная оболочка, а также различные подоболочки и фоновые процессы, порожденные основной оболочкой, завершат работу. b. Я мог бы выйти из tail|в то время как только в случае триггера и сохранить другие подпроцессы, продолжающие работать c. Лучше не использовать временный файл или файл канала.