Soluzione 1:utilizzo della sostituzione del processo
Il modo più conveniente per farlo è utilizzare la sostituzione del processo. In bash la sintassi appare come segue:
foo -o >(other_command)
(Nota che questo è un bashismo. Esistono soluzioni simili per altre shell, ma il punto è che non è portabile.)
Soluzione 2:utilizzo esplicito di named pipe
Puoi fare quanto sopra esplicitamente / manualmente come segue:
-
Crea una named pipe usando
mkfifo
comando.mkfifo my_buf
-
Avvia l'altro comando con quel file come input
other_command < my_buf
-
Esegui
foo
e lascia che scriva il suo output inmy_buf
foo -o my_buf
Soluzione 3:utilizzo di /dev/stdout
Puoi anche utilizzare il file del dispositivo /dev/stdout
come segue
foo -o /dev/stdout | other_command
Potresti usare la magia di UNIX e creare una named pipe :)
-
Crea la pipe
$ mknod -p mypipe
-
Avvia il processo che legge dalla pipe
$ second-process < mypipe
-
Avvia il processo, che scrive nella pipe
$ foo -o mypipe
Per rendere felice StackOverflow, lasciatemi scrivere una frase abbastanza lunga perché la mia soluzione proposta è lunga solo 18 caratteri invece dei 30+ richiesti
foo -o /dev/stdout
Le pipe con nome funzionano bene, ma hai una sintassi più bella e più diretta disponibile tramite la sostituzione del processo bash che ha l'ulteriore vantaggio di non utilizzare una pipe con nome permanente che deve essere successivamente eliminata (la sostituzione del processo utilizza pipe con nome temporanee dietro le quinte):
foo -o >(other command)
Inoltre, se vuoi reindirizzare l'output al tuo comando e anche salvare l'output in un file, puoi farlo:
foo -o >(tee output.txt) | other command