长时间睡眠呼叫后的 sudo 命令,无需重新提示 sudo 密码

bur*_*ren 4 bash sudo bashrc

我正在尝试编写一个简单的 bash 函数,该函数睡眠 X 分钟,然后运行系统睡眠命令(对我来说,这是sudo pm-suspend因为我在 Ubuntu 上)现在该函数如下所示:

function sleepin {
  sleep $(bc <<< $1*60); sudo pm-suspend
}
Run Code Online (Sandbox Code Playgroud)

第一个参数是在睡眠应该发生多少分钟之后。问题是睡眠后脚本提示我输入 sudo 密码。

我应该如何重新编写脚本,以便它在睡眠后不会提示我输入 sudo 密码?

(我试过打电话,sudo sleepin 30但它仍然提示我输入密码。请注意,如果睡眠调用足够小,bash 不会提示输入密码,但如果睡眠时间更长,它会......)

Gil*_*il' 5

将 sleep 放入 sudo 命令中。

seconds=$(($1 * 60))
sudo sh -c "sleep $seconds; pm-suspend"
Run Code Online (Sandbox Code Playgroud)


Mat*_*att 3

正如 Mat 所建议的,您可以允许用户在没有密码的情况下运行 pm-suspend。

跑步sudo visudo

添加youruser ALL=(root) NOPASSWD: /path/to/pm-suspend