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在该行的末尾添加:。