Я пытаюсь добавить строку в файл hosts на моем Mac, выполнив однострочную команду на терминале.
Я думал, что это будет легко с помощью sudo, но он возвращает «Отказано в разрешении», когда я пытаюсь добавить >>
в файл hosts, но он работает, если я пытаюсь заменить >
содержимое хостов.
sudo echo test >> /etc/hosts
-bash: /etc/hosts: Permission denied
$
sudo echo test > /etc/hosts
Password:
$
ОС обновлена.
Ответы:
Это потому, что
echo
он запускается от имени root, но оболочка - это та, которая фактически выполняет перенаправление. Вам нужно создать новую оболочку, чтобы это работало:Изменить: я не видел тот факт, что
>
перенаправление работает; Я не могу этого объяснить.источник
tee
потому что разрешение выполнения подоболочкиsudo
в большинстве случаев является и должно быть заблокировано в большинстве производственных сред по соображениям безопасности.Вместо того, чтобы запускать echo через редирект, который будет запускаться как ваш текущий пользователь, а не как root, поскольку echo запускается в вашем примере, используйте tee, как предполагает Стив Бузонас.
Судо теперь применяется к команде tee. '-A' добавляет к файлу
Это также выведет тройник к стандартному выводу. Если вы не хотите видеть «тест» в вашем терминале, также добавьте:
> /dev/null
в конец этой строки.источник
Чтобы убедиться, что новая строка была создана первой, я использовал это:
источник