Como ejercicio, ¿existe algún método para redireccionar una cadena a un fichero sin echo? Actualmente estoy usando
echo "Hello world" > test.txt
Conozco cat
y printf
. Estaba pensando en algo como
> test.txt <<<"Hello world"
Por supuesto, esto no funciona, pero tal vez un comando similar?
Hay demasiadas formas de discutir que probablemente no te importen. Puedes hackear por supuesto - strace bash, o hacer todo tipo de magia negra ejecutando Bash en gdb.
En realidad tienes dos ejemplos completamente diferentes ahí. <<<'string'ya está escribiendo una cadena a un archivo. Si algo es aceptable aparte de
printf,
echo, y
cat`, puedes usar muchos otros comandos para que se comporten como cat (sed, awk, tee, etc).
$ cp /dev/stdin ./tmpfooblah <<<'hello world'; cat tmpfooblah
hello world
O diablos, dependiendo de cómo hayas compilado Bash.
$ enable -f /usr/lib/bash/print print; print 'hello world' >tmpfile
Si quieres usar sólo cadenas bash y redirección, en bash puro, sin hacking, y sin loadables, no es posible. En ksh93 sin embargo, es posible.
$ rm tmpfooblah; <<<'hello world' >tmpfooblah <##@(&!()); cat tmpfooblah
hello world
La forma de hacerlo en bash es
zsh <<< '> test <<< "¡Hola Mundo!"'
.
Esta es una de las diferencias interesantes entre zsh y bash: dado un unchained >
o >>
, zsh tiene el buen sentido de engancharlo a stdin, mientras que bash no. Sería francamente útil - si sólo fuera estándar.
Traté de usar esto para enviar & anexar mi clave ssh a través de ssh a un archivo remoto authorized_keys
, pero el host remoto era bash, por supuesto, y tranquilamente no hizo nada.
Y eso'es por lo que deberías usar simplemente cat
.