Dwa okna, ten sam użytkownik, z monitami bash. W oknie typu 1:
$ mkfifo f; exec <f
Więc bash próbuje teraz odczytać z deskryptora pliku 0, który jest odwzorowany na nazwany potok f
. W oknie typu 2:
$ echo ls > f
Teraz okno-1 wypisuje ls, a następnie powłoka umiera. Dlaczego?
Następny eksperyment: ponownie otwórz okno-1 za pomocą exec <f
. W oknie typu 2:
$ exec 3>f
$ echo ls >&3
Po pierwszym wierszu powyżej okno-1 budzi się i wyświetla monit. Dlaczego? Po drugim wierszu powyżej okno-1 drukuje dane ls
wyjściowe, a powłoka pozostaje przy życiu. Dlaczego? W rzeczywistości, teraz w oknie-2, echo ls > f
nie zamyka powłoki okna-1.
Odpowiedź musi mieć związek z istnieniem deskryptora pliku 3 z okna-2 odwołującego się do nazwanego potoku ?!
exec 3>f
uruchomieniu pierwsza powłoka wyświetla monit. (Drobny punkt, czy miałeś na myśli „w trybie pisania ” w swoim komentarzu?)
exec <f
,bash
nie próbuje odczytać zf
, to jest najpierw próbuje otworzyć go.open()
Nie wróci, dopóki istnieje jakiś inny sposób robi się w trybie zapisu do rury (w którym momencie rura zostanie instancja, a powłoka będzie czytać wejście z nią).