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

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

我尝试通过在终端上执行一行命令来向 Mac 上的 hosts 文件中添加一行。

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

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

sudo echo test > /etc/hosts
Password:
$ 

操作系统是最新的。

答案1

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

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

编辑:我还没有看到重定向起作用的事实>;我无法解释这一点。

答案2

不要通过重定向运行 echo,因为 echo 将以当前用户身份运行,而不是像示例中那样以 root 用户身份运行,而是使用球座……建议

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

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

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

答案3

通过脚本也可以很好地工作:

sudo /bin/sh -c 'echo "127.0.0.1 mydomain" >> /etc/hosts'

答案4

为了确保首先创建新行,我使用了这个:

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

相关内容