Isso não funciona porque o redirecionamento é executado pelo shell, não pelo comando ao qual se aplica. Mas o seu shell não está rodando como root, somente echo 'text'
é.
Um truque comum quando você precisa ter permissões de root para gravar em um arquivo, mas não para gerar os dados, é usar tee
:
echo 'text' | sudo tee -a /file.txt
tee
imprime o texto para stdout também. Para silenciá-lo, para que ele se comporte de maneira mais semelhante ao acréscimo de shell ( >>
), direcione o stdout para /dev/null
:
echo 'text' | sudo tee -a /file.txt > /dev/null
Se você precisa de permissões de root para gerar os dados, você pode executar dois comandos sudo
separados ou executar um shell dentro de sudo
e fazer o redirecionamento lá (cuidado com as citações).
sudo echo 'text' | sudo tee -a /file.txt
sudo sh -c 'echo "text" >>/file.txt'
Ao sobrescrever em vez de anexar, se você estiver acostumado com o shell recusando-se a truncar um arquivo existente com o operador >
( set -o noclobber
), lembre-se de que essa proteção não será aplicada. sudo sh -c 'echo >/etc/passwd'
e sudo tee /etc/passwd
sobrescreverão /etc/passwd
, você precisaria de sudo sh -o noclobber -c 'echo >/etc/passwd'
para essa configuração de noclobber
para também ser aplicada à sh
iniciada por sudo
.