数分钟和数秒即可入睡


Answers:


32

来自 联机帮助页

给定两个或多个参数,请暂停由指定的时间 它们的值之和

所以:

sleep 7m 30s

2
很好,我必须更仔细地阅读手册页...
Ravexina

4
可能值得注意的是,这是 bash内置的和GNU sleep 行为。POSIXly,sleep仅需要将整数理解为秒
Sergiy Kolodyazhnyy

17

另一种方法是:

sleep 7.5m

man sleep

与大多数要求NUMBER为整数的实现不同,这里NUMBER可以是任意浮点数。


10

已经有两个很好的答案,但我想扩展一点。将以下命令复制并粘贴到您的终端中:

$ sleep 3d 5h 7m 30.05s &
[1] 7321

这将启动第二个过程,该过程将休眠3天,5小时,7分钟和30.05秒。进程ID(PID)为7321以我。

确认PID使用

$ ps aux | grep sleep
rick      7321  0.0  0.0  14356   660 pts/2    S    22:40   0:00 sleep 3d 5h 7m 30.05s
root     12415  0.0  0.0  14356   700 ?        S    22:41   0:00 sleep 60
rick     12500  0.0  0.0  21292   968 pts/2    R+   22:41   0:00 grep --color=auto sleep

第一个条目是我们感兴趣的条目。第二个条目是针对我在启动时运行的永久程序的。第三个条目是grep命令本身。

现在,要查看sleepPID生成的命令还剩余多少时间(以秒为单位),7321我们可以使用以下方法:如何确定“睡眠”中剩余的时间?命令:

$ remaining_sleep_time 7321
277304.05
$ remaining_sleep_time 7321
277296.05
$ remaining_sleep_time 7321
277262.05

您可以在~/.bashrc文件中包含的命令代码:

remaining_sleep_time() { # arg: pid
  ps -o etime= -o args= -p "$1" | perl -MPOSIX -lane '
    %map = qw(d 86400 h 3600 m 60 s 1);
    $F[0] =~ /(\d+-)?(\d+:)?(\d+):(\d+)/;
    $t = -($4+60*($3+60*($2+24*$1)));
    for (@F[2..$#F]) {
      s/\?//g;
      ($n, $p) = strtod($_);
      $n *= $map{substr($_, -$p)} if $p;
      $t += $n
    }
    print $t'
}

我剩余的时间不工作。andy @ 7_〜$$ mainly_sleep_time 7321剩余_sleep_time:找不到命令
fixit7 '18

1
remaining_sleep_time需要根据链接将@ fixit7 复制到您的~/.bashrc文件中。您也可以将代码放入bash脚本文件中。
WinEunuuchs2Unix

5

命令睡眠总是以秒为单位。您可以使用(((7x60)+30)秒,然后输入以下内容:

睡觉450


3
如前所述以前,睡眠的确总是能理解秒,但在GNU睡眠的Bash shell(不知道的ksh和zsh中)的情况下-那些还允许字母参数在其他的答案指出。使用shell算术扩展可以改善您的答案,因此sleep $((60*7))可以在几分钟内使用
Sergiy Kolodyazhnyy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.