Agregar una línea en el archivo de hosts, obtener permiso denegado cuando se usa sudo - Mac


13

Estoy tratando de agregar una línea en el archivo de hosts en mi Mac mediante la ejecución de un comando de una línea en la terminal.

Pensé que sería fácil usar sudo, pero devuelve "permiso denegado" cuando intento agregar >>al archivo de hosts, pero funciona si intento reemplazar >el contenido de los hosts.

sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$

sudo echo test > /etc/hosts
Password:
$ 

El sistema operativo está actualizado.


simplemente use un editor de texto (comenzó con sudo ) para modificar su / etc / hosts
MrSmith42

1
Quiero hacer un script que ayude a automatizar esto, por lo que un editor de texto no ayudaría en este caso.
Menta

Respuestas:


16

Eso es porque echose está ejecutando como root, pero el shell es el que realmente realiza la redirección. Necesitas generar un nuevo shell para que esto funcione:

sudo -- sh -c "echo test >> /etc/hosts"

Editar: no he visto el hecho de que la >redirección funciona; No puedo explicar eso.


Creo que vale la pena señalar la utilidad teeporque permitir una ejecución de subshell desde sudoes y debe bloquearse en la mayoría de los entornos de producción por razones de seguridad.
Steve Buzonas

9

En lugar de ejecutar echo a través de una redirección que se ejecutará como su usuario actual, no root como echo se está ejecutando 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 salida estándar. Si no desea ver 'prueba' en su terminal, también agregue: > /dev/nullal final de esa línea.


1

Para asegurarme de que primero se creó una nueva línea, usé esto:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.