Due finestre, stesso utente, con istruzioni bash. Nella finestra-1 digitare:
$ mkfifo f; exec <f
Quindi ora bash sta tentando di leggere dal descrittore di file 0, che è mappato sulla pipe denominata f
. Nella finestra-2 digitare:
$ echo ls > f
Ora window-1 stampa un s e poi il guscio muore. Perché?
Esperimento successivo: apri di nuovo window-1 con exec <f
. Nella finestra-2 digitare:
$ exec 3>f
$ echo ls >&3
Dopo la prima riga sopra, window-1 si sveglia e stampa un prompt. Perché? Dopo la seconda riga sopra, window-1 stampa l' ls
output e la shell rimane in vita. Perché? Infatti, ora in window-2, echo ls > f
non si chiude la shell window-1.
La risposta deve avere a che fare con l' esistenza del descrittore di file 3 da window-2 che fa riferimento alla named pipe ?!
exec 3>f
eseguita, la prima shell fornisce un prompt. (Punto minore, volevi dire "in modalità di scrittura " nel tuo commento?)
exec <f
,bash
non sta tentando di leggere daf
, sta prima tentando di aprirlo . Ilopen()
comando non ritorna fino a quando non viene eseguito un processo in un'altra modalità di scrittura sulla pipe (a quel punto la pipe verrà istanziata e la shell leggerà l'input da essa).