Отправка двух выходных каналов процессов в процесс ввода двух каналов - PullRequest
0 голосов
/ 11 июня 2018

У меня есть две команды (команда 1 и команда2), которые выводят в stdout (fd 1), и я хотел бы отправить их новой команде 3, которая готова принять их в двух каналах, одна на stdin из команды command1 идругой в любом другом файловом дескрипторе, то есть в fd 3, из command2.Как я могу сделать это в Bash?

1 Ответ

0 голосов
/ 11 июня 2018

Это может быть сделано с помощью метода процесса , из bash ref:

Замена процесса позволяет ссылаться на вход или выход процесса, используя имя файла.Он принимает форму

<(список) </p>

или

> (список)

Список процессов запускается асинхронно, и его ввод или выводотображается как имя файла.

Используя эту технику, вы в основном можете прочитать вывод команды (список в приведенном выше примере), как если бы вы читали из файла.Фактически, вы можете иметь несколько входных данных, которые могут решить вашу проблему следующим образом:

command3 <( command1 ) <( command2 )

Для этого вам нужно открыть оба файла (полученные в качестве аргументов) и прочитать их.

Подстановка процесса в основном создает файл (/ dev / fd / XX) и использует его имя в качестве входных данных для принимающей команды (command3 в приведенном выше примере).Пожалуйста, имейте в виду, что команды command1 и command2 будут выполняться асинхронно, поэтому вы не можете ожидать / полагаться на какой-либо порядок выполнения при запуске вышеуказанной команды.

...