Puedes redirigir todo lo que quieras echo
pero no hará nada con él. echo
no lee su entrada estándar. Todo lo que hace es escribir en la salida estándar sus argumentos separados por un carácter de espacio y terminados por un carácter de nueva línea (y con algunas echo
implementaciones con algunas secuencias de escape en ellas expandidas y / o argumentos comenzando con -
posiblemente tratados como opciones).
Si desea echo
mostrar el contenido de un archivo, debe pasar ese contenido como argumento a echo
. Algo como:
echo "$(cat my_file.txt)"
Tenga en cuenta que $(...)
despoja al carácter de nueva línea de arrastre s de la salida de ese cat
comando, y echo
añade una vuelta.
También tenga en cuenta que, excepto con zsh
, no puede pasar caracteres NUL en los argumentos de un comando, por lo que lo anterior normalmente no funcionará con archivos binarios. yash
también eliminará los bytes que no forman parte de los caracteres válidos.
Si la razón para querer hacer eso es porque quiere echo
ampliar el \n
, \b
, \0351
... secuencias de escape en el archivo (como UNIX conformes echo
implementaciones hacen, pero no en todos ), entonces prefiere utilizar printf
en su lugar :
printf '%b\n' "$(cat my_file.txt)"
Al contrario echo
, ese es portátil y no tendrá problemas si el contenido del archivo comienza con -
.
Como alternativa a $(cat file)
, con ksh
, zsh
y bash
, también se puede hacer:$(<file)
. Es un operador especial mediante el cual el shell , en lugar de cat
leer, lee el contenido del archivo para completar la expansión. Todavía despoja las líneas nuevas y chokes finales en bytes NUL excepto en zsh
. En bash
eso todavía se bifurca un proceso extra. También tenga en cuenta que una diferencia es que no obtendrá ningún error si intenta leer un archivo de tipo directorio de esa manera. Además, si bien $(< file)
es especial, $(< file; other command)
no lo es (en zsh
, cuando no se emula a otro shell, eso aún expandiría el contenido del file
, ejecutando el comando implícito $READNULLCMD
(generalmente un localizador)).
echo
?