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

12

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

Pensei que seria fácil usar o sudo, mas ele retorna "permissão negada" quando tento adicionar >> ao arquivo de hosts, mas funciona se eu tentar substituir > do 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.

    
por Mint 19.01.2013 / 21:59

3 respostas

15

Isso porque echo está sendo executado como root, mas o shell é o que está realmente 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 > redirect funciona; Eu não posso explicar isso.

    
por 19.01.2013 / 22:05
9

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

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

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

Isso também irá gerar saída para a saída padrão. Se você não quiser ver "teste" no seu terminal, adicione também: > /dev/null ao final dessa linha.

    
por 11.07.2014 / 05:33
1

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

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
    
por 21.05.2014 / 18:47