我正在尝试编写一个向/ etc / hosts添加一行的脚本,这意味着我需要sudoer权限。但是,如果我从桌面运行脚本,则不会提示输入密码。我只是被许可拒绝了。
示例脚本:
#!/bin/bash
sudo echo '131.253.13.32 www.google.com' >> /etc/hosts
dscacheutil -flushcache
终端弹出并声明权限被拒绝,但实际上从未提示输入sudo密码。有办法解决这个问题吗?
答案 0 :(得分:3)
sudo doesn't apply to the redirection operator。您可以使用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'
答案 1 :(得分:1)
你在这里做的有效:
切换到root,然后运行echo
切换回自己并尝试将sudo
的输出附加到
/etc/hosts
这不起作用,因为您在追加到/etc/hosts
时需要是root用户,而不是在您运行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"