【问题标题】:Sudo not prompting for password Mac bash scriptSudo 不提示输入密码 Mac bash 脚本
【发布时间】:2012-10-08 22:13:40
【问题描述】:

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

示例脚本:

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

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

【问题讨论】:

  • sudo 是否适用于其他操作?
  • 它不提示输入密码。如果我执行 sudo ls 它将运行 ls 命令,但它不会作为 sudo 运行。

标签: macos bash sudo


【解决方案1】:

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'

【讨论】:

  • bash -c 命令未找到,但第一个命令就像一个魅力。谢谢。
【解决方案2】:

你在这里做的是有效的:

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

  2. 切换回自己并尝试将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"

【讨论】:

    猜你喜欢
    • 2019-02-14
    • 2021-07-19
    • 2011-04-27
    • 2019-09-04
    • 1970-01-01
    • 1970-01-01
    • 2018-10-17
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多