У мене є програма, яка автоматично закривається після зчитування 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
причина зависає в баш, чому?