C'est parce que echo
est exécuté en tant que root, mais le shell est celui qui effectue réellement la redirection. Vous devez créer un nouveau shell pour que cela fonctionne :
sudo -- sh -c "echo test >> /etc/hosts"
Edit :je n'ai pas vu le fait que le >
rediriger les travaux ; Je ne peux pas l'expliquer.
Plutôt que d'exécuter echo via une redirection qui sera exécutée en tant que votre utilisateur actuel, et non root car echo est exécuté dans votre exemple, utilisez tee comme le suggère Steve Buzonas
echo 'test' | sudo tee -a /etc/hosts
Le sudo est maintenant appliqué à la commande tee. Le '-a' s'ajoute au fichier
Cela produira également le té sur la sortie standard. Si vous ne voulez pas voir 'test' dans votre terminal ajoutez également :> /dev/null
à la fin de cette ligne.