Найти тему

Я забыл, что stderr в BASH тоже файл

Заголовок немного убивает интригу, но тут и правда больше нечего сказать: оператор ">" всё перепишет с начала, а ">>" допишет в конец.

А было дело так: имеется bash-скрипт с кучей операций, вызовов других скриптов и программ и в конце, если где-то по пути случалась ошибка, я хотел "дописать" в stderr что-то. Ну и "дописал"

echo "some error happened" > /dev/stderr

Эта вся красота в функции допустим F. Зачем отдельно? А чтобы вывод её можно направить по настроению в файл/в syslog/в консоль, например так

F 1> >(logger -p notice) 2> >(logger -p err)

Без ошибок все лог сообщения прекрасно долетали куда надо, но все сообщения об ошибках терялись, почему-то. Бился я долго, подозревал всякое, но наконец сообразил, что в том единственом месте, где я сам пишу в stderr, я не "дописывал", а "писал" в stderr - а он ведет себя как файл, открывающийся в начале работы скрипта и всю дорогу открытый. Можно ненароком переписать, если вместо ">>" поставить ">".

Стоит ли эта история внимания широкой публики? Врядли, как и многое что тут будет написано. Но я сам так долго искал эту простую ошибку, что не сохранить её было бы не правильно.