Sudo没有提示输入密码Mac bash脚本

时间:2012-10-08 22:13:41

标签: macos bash sudo

我正在尝试编写一个向/ etc / hosts添加一行的脚本,这意味着我需要sudoer权限。但是,如果我从桌面运行脚本,则不会提示输入密码。我只是被许可拒绝了。

示例脚本:

#!/bin/bash
sudo echo '131.253.13.32        www.google.com' >> /etc/hosts
dscacheutil -flushcache

终端弹出并声明权限被拒绝,但实际上从未提示输入sudo密码。有办法解决这个问题吗?

2 个答案:

答案 0 :(得分:3)

sudo doesn't apply to the redirection operator。您可以使用echo | sudo tee -asudo 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)

你在这里做的有效:

  1. 切换到root,然后运行echo

  2. 切换回自己并尝试将sudo的输出附加到 /etc/hosts

  3. 这不起作用,因为您在追加到/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"