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

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

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

如果我有它,我会愿意做一件事,如果我没有它,那么它不应该提示我做这件事,只是让我做另一件事。

因此在伪代码中它看起来像这样:

if (sudo = true)
   echo "i got sudo"
else
   echo "i dont have sudo"
fi

但是我发现的所有命令在尝试检查时总是提示我输入 sudo 密码。

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

希望可以有人帮帮我。

答案1

您可以使用:

if sudo -n true 2>/dev/null; then 
    echo "I got sudo"
else
    echo "I don't have sudo"
fi

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

相关内容