Перенаправление std_out, std_err с (вне) grep - PullRequest
3 голосов
/ 26 июня 2019

У меня проблемы с перенаправлением в Linux, Вот небольшая схема, чтобы проиллюстрировать цель, лучше, чем слова (я надеюсь)

+------------+                              +----------------+
|   std_out  +----------+------------------>+     log.log    |
+------------+          |                   +----------------+
                        |
                        |                   +----------------+
                        +----------------->>+                |
                                            |   histo.log    |
                        +----------------->>+                |
                        |                   +----------------+
                        |
                        |
 +------------+         |   grep -v "exp"   +----------------+
 |   std_err  +---------+------------------>+   error.log    |
 +------------+                             +----------------+

Я хотел бы сделать это с выводом скрипта. Мне удается сделать log.log и error.log с помощью grep,

./script.sh >log.log 2> >(grep -v "Expression" > error.log )

Но у меня проблемы с histo.log, где он должен добавить (я имею в виду >> или нет->>) std_out и std_err (без grep), и я не очень разбираюсь в продвинутых вещах о перенаправлении .

Если у кого-нибудь возникнет идея решить мою проблему, я буду благодарен:)

1 Ответ

4 голосов
/ 26 июня 2019

Вот страшное использование подстановок выходного процесса:

$ cat driver.sh
echo line 1 to stdout
echo line 1 to stderr >&2
echo line 2 to stderr is expected >&2
echo line 3 to stderr >&2

$ sh driver.sh > >(tee -a histo.log > log.log) 2> >(tee -a histo.log | grep -v exp > error.log)

$ cat log.log
line 1 to stdout

$ cat histo.log
line 1 to stdout
line 1 to stderr
line 2 to stderr is expected
line 3 to stderr

$ cat error.log
line 1 to stderr
line 3 to stderr

Это добавит к histo.log, но перезапишет log.log и ошибкуФайлы .log, как вы указали на диаграмме.

...