2016-05-03 2 views
1

J'essaie d'ajouter une ligne au fichier hosts sur un mac. La commande J'utilise est:Modifier le fichier hôte avec le script sur Mac

sudo echo "192.168.99.100 test" >> /private/etc/hosts 

Cette méthode fonctionne sur Windows & linux, mais sur Mac, je ne dispose pas des autorisations pour exécuter ce même lorsqu'il fonctionne en mode sudo.

Quelqu'un peut-il me dire ce que je fais mal et comment je peux résoudre ce problème?

StefanJanssen

+0

Copie possible de [Comment utiliser sudo pour rediriger la sortie vers un emplacement pour lequel je n'ai pas l'autorisation d'écrire?] (Http://stackoverflow.com/questions/82256/how-do-i-use- sudo-to-redirect-output-to-a-location-je-ne-dois-pas-permission-to-wr) – Neil

Répondre

1

Essayez echo '192.168.99.100 test' | sudo tee -a /private/etc/hosts.

>> est la syntaxe du shell lui-même, qui s'exécute en tant que votre utilisateur. sudo echo "192.168.99.100 test" >> /private/etc/hosts exécute echo "192.168.99.100 test" en tant que root et le >> "pipe to file" est exécuté en tant que votre utilisateur.

tee est une commande ordinaire que vous pouvez exécuter en tant qu'utilisateur root avec sudo qui génère à la fois stdout et un fichier, donc echo 'line' | sudo tee -a file fera ce que vous voulez. tee -a ajoutera au fichier au lieu de l'écraser.

+0

@trojanfoe Ce qui ressemble à des ordures? –

+0

@trojanfoe Ce n'est pas le cas, la redirection est lancée dans le shell actuel qui n'a pas de privilèges sudo. – 123

+0

'sudo' est juste une commande ordinaire qui prend en entrée via des arguments de ligne de commande. '>>' est interprété par le shell au lieu d'être ajouté en tant qu'argument à la commande. C'est pourquoi 'echo 'hello' >> file' n'affiche pas' hello >> file' et écrit plutôt 'hello' dans le fichier' file'. –