如何检查是否为此终端会话输入了 sudo 密码?

Moo*_*oom 20 command-line sudo

正如标题中所说,我需要检查是否在 shell 中为此终端会话输入了 sudo 密码(也就是,如果我现在拥有 sudo 权限)。

如果我有,我想做一件事,如果我没有,那么它不应该提示我去做,让我做另一件事。

所以在伪代码中它看起来像这样:

if (sudo = true)
   echo "i got sudo"
else
   echo "i dont have sudo"
fi
Run Code Online (Sandbox Code Playgroud)

但是我为此找到的所有命令在尝试检查时总是提示我输入 sudo 密码。

基本思想是脚本可以(并且会)在多个地方要求提供 sudo 密码,但我不想打印出“脚本现在将要求您提供 sudo 密码”。如果已经输入(这意味着它不会要求输入 sudo 密码)。

希望可以有人帮帮我。

Rad*_*anu 26

您可以使用:

if sudo -n true 2>/dev/null; then 
    echo "I got sudo"
else
    echo "I don't have sudo"
fi
Run Code Online (Sandbox Code Playgroud)

-n(非交互式)选项阻止sudo从提示用户输入密码。如果命令运行需要密码,sudo将显示错误消息(重定向到/dev/null)并退出。如果不需要密码,则此表达式为真:sudo -n true 2>/dev/null

  • 回显一个字符串并将其与另一个字符串进行比较并没有真正的帮助, sudo 的退出代码足以进行测试。第一行可以是`if sudo -n true 2>/dev/null; 然后` (4认同)
  • 我知道这是 AskUbuntu,但这在 MacOSX 中不起作用,sudo -n 总是返回 0,因此检查返回代码失败。我在这里说这个是因为我已经搜索过这个页面并且这个页面出现在谷歌中。 (2认同)
  • 这是一个坏主意,因为如果在 sudoers 中启用了“mail_badpass”,每次需要密码时它都会向 root 发送邮件。 (2认同)