fear86
@fear86
Developer

Перенаправление STDERR и STDOUT в разные скрипты на STDIN?

Привет, собственно вопрос в заголовке, никак не могу выгуглить.
  • Вопрос задан
  • 3753 просмотра
Решения вопроса 1
fear86
@fear86 Автор вопроса
Developer
Нашел решение через переопределение потоков:

{ command1 2>&3 | command2; } 3>&1 1>&2 | command3

Отсюда: stackoverflow.com/questions/9112979/pipe-stdout-and-stderr-to-two-different-processes-in-shell-script
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
ntkt
@ntkt
Потомственный рыцарь клавиатуры и паяльника
Можно, например, создать именованные пайпы (google: mkfifo).

Сделаем тестовую прогу test_redir.c следующего содержания:
#include <stdio.h>
int main()
{
fprintf(stdout,"Test STDOUT\n");
fprintf(stderr,"Test STDERR\n"); return 0;
}


Собрали, подготовили к запуску.
$ gcc test_redir.c -o test_redir
$ chmod +x test_redir

Теперь создадим пайпы:
$ mkfifo test_out
$ mkfifo test_err

Запустим
$ ./test_redir 1>test_out 2>test_err

Теперь в двух новых терминалах посмотрим, что в пайпах:
$ cat tmp/test_out
Test STDOUT
$ cat tmp/test_err
Test STDERR
Это плохой пример, поэтому в первом терминале вывод появится только после того, как мы посмотрим, что в пайпе test_err, но идея должна быть ясна.
Ответ написан
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
Только через внешний fifo, например так:

D=`mktemp -d` ; mkfifo "$D/stdout" ; mkfifo "$D/stderr" ; cmd_stdout < "$D/stdout" & cmd_stderr < "$D/stderr" & cmd > "$D/stderr" 2>"$D/stdout" & wait ; rm -rf "$D"
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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