
У меня есть две программы, одна из них сначала что-то печатает, им нужно взаимодействовать друг с другом с помощью их стандартных операций ввода-вывода.
Есть ли способ в 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.
Пожалуйста прочтиэтот ответо возможных сценариях, ведущих к тупиковой ситуации.