我正在尝试编写一个脚本,将一行附加到 /etc/hosts,这意味着我需要 sudoer 权限。但是,如果我从桌面运行脚本,它不会提示输入密码。我只是得到许可被拒绝。
示例脚本:
#!/bin/bash
sudo echo '131.253.13.32 www.google.com' >> /etc/hosts
dscacheutil -flushcache
一个终端弹出并说权限被拒绝,但实际上从未提示输入 sudo 密码。有没有办法解决这个问题?
sudo 不适用于重定向运算符。您可以使用echo | sudo tee -a
或sudo bash -c 'echo >>'
:
echo 131.253.13.32 www.google.com | sudo tee -a /etc/hosts
sudo bash -c 'echo 131.253.13.32 www.google.com >> /etc/hosts'
您在这里所做的实际上是:
切换到root,然后运行echo
切换回自己并尝试将输出附加sudo
到
/etc/hosts
那是行不通的,因为当你追加到时你需要是 root /etc/hosts
,而不是在运行时echo
。
最简单的方法是
sudo bash -c "sudo echo '131.253.13.32 www.google.com' >> /etc/hosts"
它将以 root 身份运行 bash 本身。但是,这并不是特别安全,因为您现在以 root 身份调用 shell,这可能会做很多讨厌的事情(特别是,它会执行名称在环境变量 BASH_ENV 中的文件的内容,如果有一. 所以你可能更愿意谨慎一点:
sudo env -i bash -c "sudo echo '131.253.13.32 www.google.com' >> /etc/hosts"