Eso es porque echo
se está ejecutando como root, pero el shell es el que realmente realiza la redirección. Necesita generar un nuevo shell para que esto funcione:
sudo -- sh -c "echo test >> /etc/hosts"
Editar:no he visto el hecho de que el >
redirigir obras; No puedo explicar eso.
En lugar de ejecutar echo a través de una redirección que se ejecutará como su usuario actual, no root como se ejecuta echo en su ejemplo, use tee como sugiere Steve Buzonas
echo 'test' | sudo tee -a /etc/hosts
El sudo ahora se aplica al comando tee. La '-a' se agrega al archivo
Esto también generará tee a la salida estándar. Si no desea ver 'prueba' en su terminal, también agregue:> /dev/null
hasta el final de esa línea.