Вот как я регистрирую как stdout, так и stderr в моих скриптах (обычно cronjobs):
#!/bin/bash
mylog() {
echo "[`date '+%Y-%m-%d %H:%M:%S'`] $1"
}
(
mylog 'start'
some-command || mylog 'error' && exit 1
mylog 'end'
) >> /var/log/my-log.log 2>&1
В некоторых сценариях я использую return вместо exit и работает нормально, но теперь говорится, что я не могу использовать return, если я не включу сценарий с помощью src или не использую его в функции. Поэтому я изменил его для выхода, но проблема в том, что он ничего не регистрирует, похоже, он останавливает перенаправление >> выхода. Другая проблема заключается в том, что я не смогу позже включить его в src, потому что я хочу остановить только этот скрипт, а не все.
Я использую перенаправление вывода, потому что я хочу регистрировать все, даже если не произошло ошибки. И иногда команды даже не возвращают правильные коды выхода, поэтому я не могу доверять этому.
Итак, как я могу «вернуться» в случае ошибки? Я знаю о 'set -e', но предпочитаю больше контролировать, когда останавливать скрипт.
Какие-нибудь мысли?