12

Я пытаюсь добавить строку в файл hosts на моем Mac, выполнив однострочную команду на терминале.

Я думал, что это будет легко с помощью sudo, но он возвращает "Отказано в разрешении", когда я пытаюсь добавить >> в файл hosts, но он работает, если я пытаюсь заменить > содержимое хостов.

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

sudo echo test > /etc/hosts
Password:
$ 

ОС обновлена.

3 ответа3

15

Это потому, что echo запускается от имени пользователя root, но оболочка - это та, которая фактически выполняет перенаправление. Вам нужно создать новую оболочку, чтобы это работало:

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

Изменить: я не видел тот факт, что > редирект работает; Я не могу этого объяснить.

9

Вместо того, чтобы запускать echo через редирект, который будет запускаться как ваш текущий пользователь, а не как root, поскольку echo запускается в вашем примере, используйте tee, как предполагает Стив Бузонас.

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

Судо теперь применяется к команде tee. '-A' добавляет к файлу

Это также выведет тройник к стандартному выводу. Если вы не хотите видеть «test» в вашем терминале, также добавьте: > /dev/null в конец этой строки.

1

Чтобы убедиться, что сначала была создана новая строка, я использовал это:

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .