Как выйти из бесконечного цикла в родительском терминале?

498
Orient

Для проверки trapкоманды я создал следующий цикл в терминале:

while true ; do echo BEGIN ; bash -e ; echo "exit code = $?" ; echo END ; done 

Как выйти из этого цикла и вернуться к родительской оболочке?

В случае использования удаленной оболочки ( ssh) вместо процесса bashустановления соединения возникает задержка, когда я могу нажать Ctrl+C. Но в приведенном выше случае я не могу быть достаточно быстрым, чтобы поймать временное окно.

1

1 ответ на вопрос

2
Kamil Maciorowski

В этом случае выход из дочерней оболочки приводит к немедленному появлению другой дочерней оболочки. Чтобы разорвать цикл, выполните это из дочерней оболочки:

kill -s SIGINT $PPID 

Затем выйдите из дочерней оболочки ( exitили Ctrl+ D). $PPIDгарантирует, что сигнал попадает в родительскую оболочку (не играя psи не угадывая).

`SIGINT` это Ctrl + C? Orient 6 лет назад 0
@Orient. Да. См. [Этот вопрос] (https://unix.stackexchange.com/q/362559/108618). Kamil Maciorowski 6 лет назад 0