Linux / bash Трубопроводы и перенаправление - PullRequest
0 голосов
/ 22 сентября 2018

У меня есть вопрос из книги "Unix / Linux, ваше окончательное руководство", который он спрашивает

Предположим, что есть программа с именем "prog", которая выводит как stderr, так и stdout.Дайте одну команду для запуска «prog» с опцией «o», и строка «arg» передается в качестве единственного аргумента, где она берет свой stdin из вывода программы «progBefore», где stdout «prog» игнорируетсяи "prog" stderr передается программе "progAfter" через "progAfter" s stin.Не используйте временные файлы.

Вот что я пробовал:

prog -o 'arg' < `progBefore` 1>/dev/null 2> progAfter

Любая помощь будет оценена спасибо

1 Ответ

0 голосов
/ 22 сентября 2018

Что это делает?

prog -o 'arg' < progBefore 1>/dev/null 2> progAfter

Вызывает программу prog, получает данные из файла progBefore, передает stdout в /dev/null (который игнорирует это) и передает stderr в файл progAfter.Вы используете перенаправление файлов, когда должны использовать каналы:

progBefore | prog -o 'arg' 2>&1 1>/dev/null | progAfter

A pipe (точнее, анонимный канал ), обозначенный |, принимаетstdout из программы слева и отправляет ее на stdin программы справа.

2>&1 перенаправляет stderr туда, куда указывает stdout, обратите внимание, что порядокважно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...