Aclarando un poco sobre por qué es preferible la opción de tee
Suponiendo que tiene el permiso apropiado para ejecutar el comando que crea la salida, si canaliza la salida de su comando a tee, solo necesita elevar los privilegios de tee con sudo y tee directo para escribir (o agregar) al archivo en cuestión.
en el ejemplo dado en la pregunta que significaría:
ls -hal /root/ | sudo tee /root/test.out
para un par de ejemplos más prácticos:
# kill off one source of annoying advertisements
echo 127.0.0.1 ad.doubleclick.net | sudo tee -a /etc/hosts
# configure eth4 to come up on boot, set IP and netmask (centos 6.4)
echo -e "ONBOOT=\"YES\"\nIPADDR=10.42.84.168\nPREFIX=24" | sudo tee -a /etc/sysconfig/network-scripts/ifcfg-eth4
En cada uno de estos ejemplos, está tomando la salida de un comando no privilegiado y escribiendo en un archivo que generalmente solo se puede escribir por raíz, que es el origen de su pregunta.
Es una buena idea hacerlo de esta manera porque el comando que genera la salida no se ejecuta con privilegios elevados. No parece importar aquí, echo
pero cuando el comando de origen es un script en el que no confías por completo, es crucial.
Tenga en cuenta que puede usar la opción -a para tee para agregar anexar (like >>
) al archivo de destino en lugar de sobrescribirlo (like >
).