Bash. Как сделать перенаправление stderr и stdout в один файл, а stderr в другой?

Здравствуйте.
Мне необходимо написать bash-скрипт, который будет записывать stdout и stderr в один файл и, одновременно, stderr в другой.

Попробовал написать так:
{ python app.py 2>&1 2>&3 1>&3 | python log.py err; } 3>&1 | python log.py out

Но проблема в том, что 2>&3 по сути "перезаписывает" 2>&1. В Итоге в файл out пишется и stderr и stdout, а вот в файл err не пишется ничего.
  • Вопрос задан
  • 2652 просмотра
Решения вопроса 1
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
(( echo stderr >&2 ; echo stdout ) 3>&2- 2>&1- 1>&3- | tee stderr ) 2>&1 | tee stdout+stderr

Внутренняя скобка генерирует вывод в stdout и stderr, дальше во внешней скобке stdout и stderr меняются местами, новый stdout записывается в файл с ошибками и обратно в stdout, дальше вне скобок stdout и stderr объединяются и записываются в общий файл.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы