Solución 1:usar la sustitución de procesos
La forma más conveniente de hacerlo es mediante la sustitución de procesos. En bash, la sintaxis es la siguiente:
foo -o >(other_command)
(Tenga en cuenta que esto es un bashism. Hay soluciones similares para otros shells, pero la conclusión es que no es portátil).
Solución 2:usar canalizaciones con nombre explícitamente
Puede hacer lo anterior explícitamente/manualmente de la siguiente manera:
-
Cree una tubería con nombre usando el
mkfifo
comando.mkfifo my_buf
-
Inicie su otro comando con ese archivo como entrada
other_command < my_buf
-
Ejecutar
foo
y deja que escriba su salida enmy_buf
foo -o my_buf
Solución 3:Usar /dev/stdout
También puede usar el archivo de dispositivo /dev/stdout
de la siguiente manera
foo -o /dev/stdout | other_command
Podrías usar la magia de UNIX y crear una canalización con nombre :)
-
Crea la tubería
$ mknod -p mypipe
-
Inicie el proceso que lee desde la tubería
$ second-process < mypipe
-
Inicie el proceso, que escribe en la tubería
$ foo -o mypipe
En aras de hacer feliz a stackoverflow, permítanme escribir una oración lo suficientemente larga porque mi solución propuesta tiene solo 18 caracteres en lugar de los más de 30 requeridos
foo -o /dev/stdout
Las canalizaciones con nombre funcionan bien, pero tiene una sintaxis más agradable y directa disponible a través de la sustitución del proceso bash que tiene el beneficio adicional de no usar una canalización con nombre permanente que luego debe eliminarse (la sustitución del proceso usa canalizaciones con nombre temporales detrás de escena):
foo -o >(other command)
Además, si desea canalizar la salida a su comando y también guardar la salida en un archivo, puede hacer esto:
foo -o >(tee output.txt) | other command