我正在编写一个脚本,该脚本以 sudo 身份运行命令并仅在我的 sudo 权限超时时回显一行文本,因此只有在使用 sudo 运行命令时才需要我的用户(不是 root)再次输入其密码。
我如何验证?请注意,$(id -u)即使以 sudo 身份运行也会返回我当前的用户 ID,因此无法检查以将其与 0...
我需要一种可以安静地检查这一点的方法。
Ale*_*exP 29
使用该选项-n检查您是否还有权限;来自man sudo:
-n , --非交互式
避免提示用户进行任何类型的输入。如果命令运行需要密码,sudo 将显示错误消息并退出。
例如,
sudo -n true 2>/dev/null && echo Privileges active || echo Privileges inactive
Run Code Online (Sandbox Code Playgroud)
请注意,权限可能会在检查sudo -n true和实际使用它们之间过期。您可能想直接尝试sudo -n command...并在失败的情况下显示一条消息,并可能以sudo交互方式重试运行。
编辑:另请参阅下面 ruakh 的评论。
跑:
sudo -nv
Run Code Online (Sandbox Code Playgroud)
如果您的 sudo 权限已超时,这将以退出代码 1 退出并输出:
sudo: a password is required
Run Code Online (Sandbox Code Playgroud)
如果您有有效的缓存凭据,此命令将成功并且不输出任何内容。
因此,总而言之,这里有一个脚本小程序,它会静默检查您是否拥有有效的缓存凭据:
if sudo -nv 2>/dev/null; then
echo "no sudo password required"
else
echo "sudo password expired"
fi
Run Code Online (Sandbox Code Playgroud)
正如其他答案/评论所提到的,-v如果有任何或其他提示进行身份验证以生成缓存的凭据,则 sudo的选项(“验证”)会静默更新缓存的凭据,并且-n选项(“非交互式”)会阻止 sudo 生成任何交互式提示,例如身份验证提示。
| 归档时间: |
|
| 查看次数: |
1211 次 |
| 最近记录: |