Ajout d'une ligne dans le fichier hosts, obtention d'une autorisation refusée lors de l'utilisation de sudo - Mac

13

J'essaie d'ajouter une ligne dans le fichier hosts sur mon Mac en exécutant une commande d'une ligne sur le terminal.

Je pensais que ce serait facile d'utiliser sudo, mais cela renvoie "permission refusée" lorsque j'essaie d'ajouter >>au fichier hosts, mais cela fonctionne si j'essaie de remplacer >le contenu des hôtes.

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

sudo echo test > /etc/hosts
Password:
$ 

Le système d'exploitation est à jour.

menthe
la source
utilisez simplement un éditeur de texte (commencé avec sudo ) pour modifier votre / etc / hosts
MrSmith42
1
Je veux créer un script qui aidera à automatiser cela, donc un éditeur de texte ne serait pas utile dans ce cas.
Mint

Réponses:

16

C'est parce qu'il echoest exécuté en tant que root, mais le shell est celui qui effectue réellement la redirection. Vous devez générer un nouveau shell pour que cela fonctionne:

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

Edit: je n'ai pas vu le fait que la >redirection fonctionne; Je ne peux pas l'expliquer.

Aluísio ASG
la source
Je pense que cela vaut la peine de noter l'utilitaire, teecar autoriser une exécution de sous-shell à partir de sudoest et devrait être bloqué dans la plupart des environnements de production pour des raisons de sécurité.
Steve Buzonas
9

Plutôt que d'exécuter echo via une redirection qui sera exécutée en tant qu'utilisateur actuel, et non root car echo est exécuté dans votre exemple, utilisez tee comme Steve Buzonas suggère

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

Le sudo est maintenant appliqué à la commande tee. Le '-a' s'ajoute au fichier

Cela produira également la sortie té vers la sortie standard. Si vous ne voulez pas voir «test» dans votre terminal, ajoutez également: > /dev/nullà la fin de cette ligne.

user2926534
la source
1

Pour m'assurer qu'une nouvelle ligne a été créée en premier, j'ai utilisé ceci:

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