Запишите 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, но я не могу понять это.