Всё что находится после трубы (pipe | ) , выполняется в новом шелле, поэтому все переменные в вашем while умирают вместе с ним. Надо переписать без использования трубы:
Если система не слишком стара - можно попробовать overlay. Это как раз для случаев "починки" файловых систем "только для чтения" без копирования содержимого.
# cd /tmp && rm -rf lower upper tmp merged && mkdir lower upper tmp merged
# mount /dev/cdrom lower
# mount -t overlay overlay -o lowerdir=lower,upperdir=upper,workdir=tmp merged
# cd merged
В баше while совершенно не встроенная функция. Она вызывает fork, и поэтому все остальное выполняется в sub-shell. Заставить вразумительно работать while нереально.
Могу порекомендовать команду logger для сваливания логов прямо в messages. Практика показала что решение ультимативно. Даже ротацией заниматься не нужно. А если все сливается на центральный syslog , то ваапще зашибись.
Ответ написан
Комментировать
Комментировать
Оценили как «Нравится»
Войдите на сайт
Чтобы задать вопрос и получить на него квалифицированный ответ.