Бывает, что он tail
умирает из-за CTRL + C, но он также отправляется (SINGINT) родителю bash
. Так как по умолчанию bash умирает при получении такого сигнала, вы должны заменить поведение по умолчанию, bash
когда его получает.
Используйте встроенную команду trap,bash(1)
чтобы изменить это.
Следующий скрипт tailf-ctrl.sh
является демо и показывает ответ:
#!/bin/bash function finish { echo "CTRL-C pressed!" } F=testfile echo hello > $F # set custom action trap finish SIGINT # comment this to see the problem tail -f $F # reset default action trap - SIGINT echo "Hello after" > after cat after
Обратите внимание, что:
- SIGINT - это сигнал, связанный с CTRL + C
- первая ловушка устанавливает пользовательское действие, связанное с сигналом SIGINT
- поведение по умолчанию для второй ловушки сброса сигнала SIGINT
Вывод скрипта:
$ bash tailf-ctrl.sh hello ^CCTRL-C pressed! Hello after
это показывает, что второй файл записан так, что конец сценария достигается, когда он tail
умирает из-за CTRL-C
.
если вы закомментируете первую команду trap, вы увидите, что ваша проблема появляется: bash немедленно завершается, и вывод должен быть:
$ bash tailf-ctrl.sh hello ^C $