我正在尝试编写一个简单的 bash 函数,该函数会休眠 X 分钟,然后运行系统睡眠命令(对我来说这是sudo pm-suspend
因为我在 Ubuntu 上),现在该函数如下所示:
function sleepin {
sleep $(bc <<< $1*60); sudo pm-suspend
}
第一个参数是应该在多少分钟后进行睡眠。问题是,睡眠后脚本提示我输入 sudo 密码。
我应该如何重写脚本,以便它在睡眠后不会提示我输入 sudo 密码?
(我尝试过拨打电话sudo sleepin 30
,但它仍然提示我输入密码。请注意,如果 sleep 呼叫足够小,bash 不会提示输入密码,但对于更长的睡眠时间,它会提示输入密码。)
答案1
将 sleep 放在 sudo 命令中。
seconds=$(($1 * 60))
sudo sh -c "sleep $seconds; pm-suspend"
答案2
正如 Mat 所建议的,您可以允许用户在没有密码的情况下运行 pm-suspend。
跑步sudo visudo
添加youruser ALL=(root) NOPASSWD: /path/to/pm-suspend
答案3
跑题了:有什么特别的原因让你不想使用 at 守护进程吗?
echo 'pm-suspend' | sudo at now + 15 minutes
可能是一个起点。