Перенаправить вывод процесса на себя в качестве ввода во время выполнения, используя bash - PullRequest
0 голосов
/ 31 мая 2018

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

mkfifo fifo
echo "Initial input" > fifo
cat  fifo |  ./my_program > fifo
rm -rf fifo

1 Ответ

0 голосов
/ 31 мая 2018

Сбой, потому что оператор echo будет ждать, пока читатель присоединится.

Один из вариантов:

mkfifo fifo
{ echo "Initial input"; cat fifo; } |  ./my_program > fifo

До ./my_program до:

  • Очистить свой выходной буфер
  • Не превышать конвейерные буферы
  • Выход при достижимом состоянии

Если программе не удается выполнить любое извыше, он будет зависать или тупик.Это проблема с ./my_program, а не с фрагментом bash.

...