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

Min*_*int 19 linux sudo hosts macos

我正在尝试通过在终端上执行一行命令在我的 Mac 上的主机文件中添加一行。

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

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

sudo echo test > /etc/hosts
Password:
$ 
Run Code Online (Sandbox Code Playgroud)

操作系统是最新的。

Alu*_* G. 20

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

sudo -- sh -c "echo test >> /etc/hosts"
Run Code Online (Sandbox Code Playgroud)

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


小智 13

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

 echo 'test' | sudo tee -a /etc/hosts
Run Code Online (Sandbox Code Playgroud)

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

这也会将 tee 输出到标准输出。如果您不想在终端中看到 'test',还可以> /dev/null在该行的末尾添加:。