Digamos que tengo un script llamado script, que lee stdiny escupe algunos resultados en la pantalla.
Si quisiera alimentar el contenido de un archivo, habría escrito:
$ ./script < file1.txtPero, ¿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.txtQue 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

zshy podrá ejecutarcmd <file1 <file2 ... <fileN;)Respuestas:
Puede usar
caty una tubería:Su ejemplo, usando una tubería y sin archivo temporal:
fuente
joinsin un archivo temporal, pero solo para que quede claro para el lector:cat f1 f2no produce la misma salida quejoin f1 f2joinen 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
URLusandocurlo una herramienta similar.Algo como esto podría usarse para obtener
stdoutmúltiples procesos y usarlos en un script a través destdinEste será el script para manejar los contenidos de entrada de
multi-input.sh:Ahora pruébalo:
Salida:
<()convierte el proceso en unfileuso virtualfdsi lo desea, por lo que<es necesario leerlo.caten sí mismo no lo necesita porque hace lo que hace, concatena archivos, virtuales o reales.fuente