Передача stdout двух программ друг другу

Передача stdout двух программ друг другу

У меня есть две программы, одна из них сначала что-то печатает, им нужно взаимодействовать друг с другом с помощью их стандартных операций ввода-вывода.

Есть ли способ в Bash перенаправить stdout двух программ друг другу? Я знаю, что я мог бы сделать это в C с помощью fork и dup, но есть ли способ с чистым Bash?

решение1

Создайте именованный FIFO, который будет «зацикливать» канал:

mkfifo myfifo
<myfifo program1 | program2 >myfifo
rm myfifo

Даже если ни одна из программ ничего не распечатает первой, вы можете «внедрить» данные в FIFO, чтобы их получил program1:

# from another console
echo start >myfifo

Чтобы наблюдать/сохранить сообщение, используйте teeв правильном месте(ах). Примеры:

<myfifo program1 | program2 | tee myfifo
<myfifo program1 | tee /dev/tty ./log1 | program2 | tee ./log2 >myfifo

Все это будет работать в sh, в этом решении нет ничего специфичного для Bash.

Пожалуйста прочтиэтот ответо возможных сценариях, ведущих к тупиковой ситуации.

Связанный контент