Adicionando uma linha ao arquivo hosts, obtendo permissão negada ao usar o sudo - Mac

14

Estou tentando adicionar uma linha ao arquivo de hosts no meu Mac executando um comando de uma linha no terminal.

Eu pensei que seria fácil usar o sudo, mas ele retorna "permissão negada" quando tento adicionar >>ao arquivo hosts, mas funciona se eu tentar substituir >o conteúdo dos hosts.

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

sudo echo test > /etc/hosts
Password:
$ 

O sistema operacional está atualizado.

hortelã
fonte
basta usar um editor de texto (começou com sudo ) para modificar seus / etc / hosts
MrSmith42
1
Quero criar um script que ajude a automatizar isso, para que um editor de texto não ajude nesse caso.
Mint

Respostas:

17

Isso echoocorre porque está sendo executado como root, mas é o shell que realmente está realizando o redirecionamento. Você precisa gerar um novo shell para que isso funcione:

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

Edit: Eu não vi o fato de que o >redirecionamento funciona; Eu não posso explicar isso.

Aluísio ASG
fonte
Eu acho que vale a pena notar o utilitário, teeporque permitir uma execução de sub-shell sudoé e deve ser bloqueado na maioria dos ambientes de produção por motivos de segurança.
Steve Buzonas
9

Em vez de executar o eco por meio de um redirecionamento que será executado como seu usuário atual, e não como root, como o eco está sendo executado no seu exemplo, use tee como sugere Steve Buzonas

 echo 'test' | sudo tee -a /etc/hosts

O sudo agora é aplicado ao comando tee. O '-a' anexa ao arquivo

Isso também produzirá tee para a saída padrão. Se você não quiser ver 'test' em seu terminal, adicione também: > /dev/nullao final dessa linha.

user2926534
fonte
1

Para garantir que uma nova linha foi criada primeiro, usei o seguinte:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
blizzrdof77
fonte