在主机文件中添加一行,使用sudo时获得权限被拒绝-Mac


14

我试图通过在终端上执行单行命令将行添加到Mac上的hosts文件中。

我以为使用sudo会很容易,但是当我尝试将其添加>>到hosts文件时,它会返回“权限被拒绝” ,但是如果我尝试替换>主机内容,它会起作用。

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

sudo echo test > /etc/hosts
Password:
$ 

操作系统是最新的。


只需使用文本编辑器(以sudo开头)来修改您的/ etc / hosts
MrSmith42

1
我想制作一个脚本来帮助实现此目的,因此文本编辑器在这种情况下无济于事。
造币厂

Answers:


17

那是因为echo它是以root身份运行的,但是shell是实际执行重定向的外壳程序。您需要生成一个新的shell才能起作用:

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

编辑:我还没有看到>重定向有效的事实;我无法解释。


我认为该实用程序值得一提,tee因为允许从sudois 执行子外壳程序,并且出于安全原因,应该在大多数生产环境中将其阻止。
史蒂夫·布佐纳斯

9

而不是通过将以您当前的用户身份运行的重定向运行echo,而不是以root身份运行,因为在您的示例中正在运行echo,请按照Steve Buzonas的建议使用tee

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

sudo现在应用于tee命令。'-a'附加到文件

这还将把T形输出到标准输出。如果您不想在终端中看到“测试”,请> /dev/null在该行的末尾添加:。


1

为了确保首先创建新行,我使用了以下命令:

sudo -- sh -c "echo  \ \ >> /etc/hosts";sudo -- sh -c "echo 127.0.0.1  testdomain.com >> /etc/hosts"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.