Clarifier un peu pourquoi l'option tee est préférable
En supposant que vous disposez des autorisations appropriées pour exécuter la commande qui crée la sortie, si vous dirigez la sortie de votre commande vers tee, vous n'avez qu'à élever les privilèges de tee avec sudo et demander à tee d'écrire (ou d'ajouter) au fichier en question.
dans l'exemple donné dans la question, cela signifierait:
ls -hal /root/ | sudo tee /root/test.out
pour quelques exemples plus pratiques:
# 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
Dans chacun de ces exemples, vous prenez la sortie d'une commande non privilégiée et écrivez dans un fichier qui n'est généralement accessible en écriture que par racine, ce qui est à l'origine de votre question.
C'est une bonne idée de procéder de cette façon car la commande qui génère la sortie n'est pas exécutée avec des privilèges élevés. Cela ne semble pas avoir d'importance ici, echo
mais lorsque la commande source est un script auquel vous ne faites pas entièrement confiance, c'est crucial.
Notez que vous pouvez utiliser l'option -a pour té pour ajouter ajouter (comme >>
) au fichier cible plutôt que de l'écraser (comme >
).