Esclarecendo um pouco sobre por que a opção tee é preferível
Supondo que você tenha permissão apropriada para executar o comando que cria a saída, se você canalizar a saída do seu comando para tee, você só precisará elevar os privilégios do tee com sudo e direcionar o tee para gravar (ou anexar) no arquivo em questão.
no exemplo dado na pergunta, isso significaria:
ls -hal /root/ | sudo tee /root/test.out
para mais alguns exemplos práticos:
# 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
Em cada um desses exemplos, você está pegando a saída de um comando não privilegiado e gravando em um arquivo que geralmente é gravável apenas pela raiz, que é a origem da sua pergunta.
É uma boa idéia fazê-lo dessa maneira, porque o comando que gera a saída não é executado com privilégios elevados. Parece que não importa aqui, echo
mas quando o comando source é um script no qual você não confia completamente, é crucial.
Observe que você pode usar a opção -a para adicionar anexar (como >>
) ao arquivo de destino em vez de substituí-lo (como >
).