1

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

示例脚本:

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

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

4

2 回答 2

4

sudo 不适用于重定向运算符。您可以使用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'
于 2012-10-08T22:59:10.917 回答
1

您在这里所做的实际上是:

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

  2. 切换回自己并尝试将输出附加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"
于 2012-10-08T23:04:42.427 回答