Hay una distinción entre argumentos de línea de comando y entrada estándar. Una tubería conectará la salida estándar de un proceso a la entrada estándar de otro. Entonces
ls | echo
Conecta la salida estándar de ls a la entrada estándar de eco. Bien verdad? Bueno, echo ignora la entrada estándar y volcará sus argumentos de línea de comando, que en este caso no son ninguno, su propio stdout. La salida: nada en absoluto.
Hay algunas soluciones en este caso. Una es usar un comando que lea stdin y vuelque a stdout, como cat.
ls | cat
"Funcionará", dependiendo de cuál sea su definición de trabajo.
Pero qué pasa con el caso general. Lo que realmente desea es convertir stdout de un comando en argumentos de línea de comando de otro. Como otros han dicho, xargs
es la herramienta auxiliar canónica en este caso, leer sus argumentos de línea de comando para un comando desde su stdin y construir comandos para ejecutar.
ls | xargs echo
También puedes convertir esto un poco, usando el comando de sustitución $()
echo $(ls)
También haría lo que quieras.
Ambas herramientas son bastante básicas para las secuencias de comandos de shell, debe aprender ambas.
Para completar, como se indica en la pregunta, la otra forma básica de convertir stdin a args de línea de comando es el read
comando incorporado del shell . Convierte "palabras" (palabras definidas por la IFS
variable) en una variable temporal, que puede usar en cualquier ejecución de comandos.
ls | echo
hacer? ¿Por qué no simplemente correrls
?