У меня есть программа, которая автоматически выходит при чтении EOF в данном потоке (в следующем случае, stdin).
Теперь я хочу создать сценарий оболочки, который создает именованный канал и подключает к нему stdin программы. Затем скрипт записывает в канал несколько раз, используя echo
и cat
(и другие инструменты, которые автоматически генерируют EOF при выходе). Проблема, с которой я сталкиваюсь, заключается в том, что, когда первое echo
сделано, оно отправляет EOF в канал и завершает работу программы. Если я использую что-то вроде tail -f
этого, я не могу отправить EOF, когда я собираюсь выйти из программы. Я исследую сбалансированное решение, но безрезультатно.
Я уже нашел, как предотвратить EOF и как вручную отправить EOF, но я не могу объединить их. Есть ли подсказка?
#!/bin/sh
mkfifo P
program < P & : # Run in background
# < P tail -n +1 -f | program
echo some stuff > P # Prevent EOF?
cat more_stuff.txt > P # Prevent EOF?
send_eof > P # How can I do this?
# fg
exec 3>P
причина зависания в bash, почему?