Questo perché echo
viene eseguito come root, ma la shell è quella che esegue effettivamente il reindirizzamento. Devi generare una nuova shell perché funzioni:
sudo -- sh -c "echo test >> /etc/hosts"
Modifica:non ho visto il fatto che >
reindirizzare i lavori; Non posso spiegarlo.
Piuttosto che eseguire echo attraverso un reindirizzamento che verrà eseguito come utente corrente, non come root poiché echo viene eseguito nel tuo esempio, usa tee come suggerisce Steve Buzonas
echo 'test' | sudo tee -a /etc/hosts
Il sudo è ora applicato al comando tee. La '-a' si aggiunge al file
Questo produrrà anche tee sullo standard output. Se non vuoi vedere 'test' nel tuo terminale aggiungi anche:> /dev/null
fino alla fine di quella riga.