Bash 使用systemctl hibernate编写休眠计时器

Bash 使用systemctl hibernate编写休眠计时器,bash,sleep,Bash,Sleep,我想使用systemctl hibernate和root权限编写一个休眠计时器函数 这是我的职责: hibernate-timer() { sudo bash -c 'echo "System is going to hibernate in $1 minute(s)..." sleep $1m systemctl hibernate' } 例如,当运行休眠计时器50时,我希望系统在50分钟后休眠。但是,我收到以下错误消息:睡眠:无效的时间间隔“m” 有人能告诉我如何使用root

我想使用
systemctl hibernate
和root权限编写一个休眠计时器函数

这是我的职责:

hibernate-timer() {
  sudo bash -c 'echo "System is going to hibernate in $1 minute(s)..." 
  sleep $1m
  systemctl hibernate'
}
例如,当运行休眠计时器50时,我希望系统在50分钟后休眠。但是,我收到以下错误消息:
睡眠:无效的时间间隔“m”


有人能告诉我如何使用root权限编写休眠计时器吗?

您忘记在单引号后将参数传递给
bash-c

hibernate-timer() {
  sudo bash -c 'echo "System is going to hibernate in $1 minute(s)..." 
  sleep $1m
  systemctl hibernate' -- $1
}
请注意我在末尾添加的
--$1
。否则,
bash-c
中的命令将无法获取任何命令行参数,因此命令中的
$1
值为空,因此命令将变为
sleep m
,而不是
sleep m
,这将不起作用

从手册页:

   --        A  --  signals the end of options and disables further option
             processing.  Any arguments after the -- are treated as  file‐
             names and arguments.

这就是如何将那里的
--$1
作为
bash-c'…'

中命令的参数传入的方法,读取有关hibernate标记的信息。这不是你想的,也不适合你的问题。谢谢janos。你自己试过吗?对我来说,它不起作用,并向我显示了与上面相同的错误消息。现在它完全起作用了。非常感谢!
--
在这种情况下做了什么?为什么不能使用它?@orschiro Awesome:-)我更新了我的答案,解释了
--