Mam program, który kończy działanie automatycznie po odczytaniu EOF w danym strumieniu (w następującym przypadku stdin).
Teraz chcę utworzyć skrypt powłoki, który tworzy nazwaną potok i podłącza do niego standardowe wejście programu. Następnie skrypt zapisuje do potoku kilka razy przy użyciu echo
i cat
(oraz innych narzędzi, które automatycznie generują EOF po wyjściu). Problem, z którym się zmagam, polega na tym, że gdy pierwszy raz się echo
zakończy, wysyła EOF do potoku i powoduje, że program się kończy. Jeśli użyję czegoś takiego, tail -f
nie mogę wysłać EOF, gdy zamierzam wyjść z programu. Poszukuję zrównoważonego rozwiązania, ale bezskutecznie.
Znalazłem już zarówno sposoby zapobiegania EOF, jak i ręczne wysyłanie EOF, ale nie mogę ich połączyć. Czy jest jakaś wskazówka?
#!/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
powoduje zawieszenie się, dlaczego?