Desidero inviare alcuni dati a una pipe e fare in modo che l'altro processo esegua i dati riga per riga. Ecco un esempio di giocattolo:Come evitare l'eco che chiude le pipe denominate FIFO? - Comportamento divertente dei FIFO di Unix
mkfifo pipe
cat pipe&
cat >pipe
Ora posso entrare quello che voglio, e dopo aver premuto entrare ho subito vedere la stessa linea. Ma se sostituire secondo condotto con echo
:
mkfifo pipe
cat pipe&
echo "some data" >pipe
Il tubo chiude dopo echo
e cat pipe&
finiture in modo che non posso passare altri dati attraverso il tubo. C'è un modo per evitare di chiudere la pipe e il processo che riceve i dati, in modo che io possa passare molte righe di dati attraverso la pipe da uno script bash e farli processare man mano che arrivano?
La seconda versione fa un lavoro eccellente! Il primo non funziona per me perché non voglio riavviare il processo che riceve i dati. – user1084871
Si potrebbe essere in grado di imbrogliare e fare in modo che il 'cat' tenga il tubo aperto per la scrittura usando:' cat pipe 3> pipe'. Il comando 'cat' non userà il descrittore di file 3, ma avrà la FIFO chiamata pipe aperta per la scrittura (sebbene la leggerà su un altro descrittore di file - probabilmente il numero 4). –
'exec> 6 pipe' non raggiunge la stessa cosa? In pratica assegna 'pipe' al descrittore di file 6 e lo tiene aperto per la scrittura. Invece di scrivere direttamente su 'pipe', probabilmente vorrai scrivere su quel descrittore usando'> & 6', ma altrimenti dovrebbe tenerlo aperto iirc – Haravikk