Digamos que tengo un script llamado script
, que lee stdin
y escupe algunos resultados en la pantalla.
Si quisiera alimentar el contenido de un archivo, habría escrito:
$ ./script < file1.txt
Pero, ¿qué pasa si quiero alimentar el contenido de los múltiples archivos al script de la misma manera, es posible? Lo mejor que se me ocurrió hasta ahora fue:
cat file1.txt file2.txt > combined.txt && ./script < combined.txt
Que usa dos comandos y crea un archivo temporal. ¿Hay alguna manera de hacer lo mismo pero sin crear el archivo combinado?
bash
shell
scripting
io-redirection
0x4B1D
fuente
fuente
zsh
y podrá ejecutarcmd <file1 <file2 ... <fileN
;)Respuestas:
Puede usar
cat
y una tubería:Su ejemplo, usando una tubería y sin archivo temporal:
fuente
join
sin un archivo temporal, pero solo para que quede claro para el lector:cat f1 f2
no produce la misma salida quejoin f1 f2
join
en mi ejemplo porque estaba jugando con él antes; en realidad, para mi ejemplo, estaba usandocat
.Si no desea usar una tubería, puede usar la redirección de entrada con sustitución de proceso:
fuente
Para añadir en la respuesta de @Jonah Braun, si alguna vez necesita agregar salida de proceso en la secuencia de comandos, así, es decir, el archivo podría no encontrarse en el disco, pero se accede a través
URL
usandocurl
o una herramienta similar.Algo como esto podría usarse para obtener
stdout
múltiples procesos y usarlos en un script a través destdin
Este será el script para manejar los contenidos de entrada de
multi-input.sh
:Ahora pruébalo:
Salida:
<()
convierte el proceso en unfile
uso virtualfd
si lo desea, por lo que<
es necesario leerlo.cat
en sí mismo no lo necesita porque hace lo que hace, concatena archivos, virtuales o reales.fuente