Запишите STDOUT & STDERR в файл журнала, также запишите STDERR на экран

Я хотел бы выполнить несколько команд и записать весь вывод в файл журнала. Я также хочу напечатать любые ошибки на экране (или опционально отправить вывод кому-либо).

Вот пример. Следующая команда запустит три команды и запишет все выходные данные (STDOUT и STDERR) в один файл журнала.

{ command1 && command2 && command3 ; } > logfile.log 2>&1

Вот что я хочу сделать с выводом этих команд:

STDERR и STDOUT для всех команд отправляются в лог-файл, на случай, если мне понадобится позже - обычно я не заглядываю сюда, если не возникнут проблемы.Выведите STDERR на экран (или, опционально, передайте по каналу / bin / mail), чтобы любая ошибка выделялась и не игнорировалась.

Было бы хорошо, если бы коды возврата были еще пригодны для использования, чтобы я мог выполнить некоторую обработку ошибок. Может быть, я хочу отправить письмо, если произошла ошибка, например:

{command1 && command2 && command3; }> logfile.log 2> & 1 || mailx -s "Произошла ошибка" [email protected]

Проблема, с которой я сталкиваюсь, заключается в том, что STDERR теряет контекст во время перенаправления ввода-вывода. '2> & 1' преобразует STDERR в STDOUT, и поэтому я не могу просматривать ошибки, если я делаю 2> error.log

Вот пара сочных примеров. Давайте представим, что я выполняю некоторые знакомые команды сборки, но я не хочу, чтобы вся сборка прекращалась только из-за одной ошибки, поэтому я использую флаг --keep-going.

{ ./configure && make --keep-going && make install ; } > build.log 2>&1

Или вот простой (и, возможно, небрежный) скрипт сборки и развертывания, который будет продолжать работать в случае ошибки.

{ ./configure && make --keep-going && make install && rsync -av --keep-going /foo devhost:/foo} > build-and-deploy.log 2>&1

Я думаю, что я хочу, включает в себяBash I / O Redirection, но я не могу понять это.

Ответы на вопрос(5)

Ваш ответ на вопрос