Вы открываете подоболочку в while read
, и эта подоболочка - это выходящая, а не правильная.
Попробуйте перед входом в цикл while:
SHELLPID=$$
А потом в цикле:
kill $SHELLPID
exit 0
Или измените цикл, чтобы не использовать подоболочку.
Поскольку родительский скрипт всегда будет в tail -f
, который никогда не заканчивается, я думаю, что у вас нет другого выбора, кроме как убить его из внутренней подоболочки.