Bash перенаправляет stdout, stderr и канал во внешнюю программу

#bash

Вопрос:

У меня есть команда Bash с запуском скрипта python и выводом результатов на stdout и stderror.

С помощью этой команды обычные журналы и журналы ошибок записываются в отдельные файлы:

 python3 file.py gt;gt; normal.log 2gt;gt; error.log  

Кроме того, stdout и stderr должны быть перенаправлены во внешнюю программу (например logToTelegram.sh):

 python3 file.py 2gt;amp;1 | logToTelegram.sh  

Есть ли способ реализовать как во время одного выполнения, так и записи файлов журнала (обычных и ошибок) и передачи stdout и stderror вместе в программу logToTelegram.sh?

Ответ №1:

Это должно сработать:

 ( python3 file.py 2gt; gt;(tee -a error.log) gt; gt;(tee -a normal.log) ) | logToTelegram.sh  

Обратите внимание, что это 2gt; gt;(tee ...) должно быть размещено раньше gt; gt;(tee ...) , чтобы это работало правильно. Для простоты обе tee команды выводятся в stdout, устраняя необходимость 2gt;amp;1 logToTelegram.sh в предварительном вводе .


Или, чтобы быть ближе к исходному коду и быть более точным:

 ( python3 file.py gt; gt;(tee -a normal.log) 2gt; gt;(tee -a error.log gt;amp;2) ) 2gt;amp;1 | logToTelegram.sh  

Здесь первый tee выводится в stdout, в то время как второй tee выводится в stderr, поэтому 2gt;amp;1 требуется отправить все выходные данные logToTelegram.sh .

Комментарии:

1. @Freude: пожалуйста, подумайте о том, чтобы отметить ответ как принятый, если он вам помог.