перенаправить stdout и stderr в один файл с префиксами - PullRequest
8 голосов
/ 12 марта 2010

Я пишу сценарий bash и мне нужно перенаправить вывод stdout и stderr команды, которую я запускаю, в один файл с префиксом каждой строки stderr или stdout соответственно.

Есть ли простой способ сделать это?

Ответы [ 2 ]

11 голосов
/ 13 марта 2010

аннотированный вывод , из Debian devscripts , делает это.

Пример на его странице руководства:

$ annotate-output make
21:41:21 I: Started make
21:41:21 O: gcc -Wall program.c
21:43:18 E: program.c: Couldn't compile, and took me ages to find out
21:43:19 E: collect2: ld returned 1 exit status
21:43:19 E: make: *** [all] Error 1
21:43:19 I: Finished with exitcode 2
10 голосов
/ 12 марта 2010

Попробуйте это:

(myCommand | sed s/^/stdout:/ >> myLogfile) 2>&1 | sed s/^/stderr:/ >> myLogFile

Первый канал вставляет префикс stdout: к стандартному выводу myCommand и добавляет его к myLogFile.

Круглые скобки используются для единой команды всего этого. Они говорят, что дальнейшие перенаправления применяются к тому, что находится внутри скобок, а не только к sed.

Затем стандартная ошибка перенаправляется на стандартный вывод с помощью 2>&1 (помните, что исходный стандартный вывод уже был перенаправлен на myLogFile). Вторая труба вставляет префикс stderr: к нему и добавляет его к myLogFile.

...