Я пытаюсь перенаправить стандартный ввод и стандартный вывод программы. В настоящее время я экспериментирую с макетом bash, но у меня странное поведение.
У меня есть следующее:
mkfifo in
mkfifo out
У меня также есть следующий скрипт test.sh
#!/bin/bash
while read line; do
echo "I read ${line}"
done < /dev/stdin
В терминале 1 я делаю следующее:
tail -f out
В терминале 2 я делаю следующее:
./test.sh < in > out
В терминале 3 я делаю следующее:
echo "foo" > in
echo "bar > in
Однако вместо того, чтобы видеть, как я читаю foo, а затем я читаю bar в терминале 1, я ничего не получаю после первого эха, обе строки после второго эха, а затем программа test.sh в терминале 2 завершается. Как я могу предотвратить выход, чтобы я мог продолжать отправлять входные данные test.sh? Кроме того, вместо буферизации, а затем дампа при завершении программы, как я могу получить вывод из test.sh для сброса в хвост -f в терминале 1?