Verwenden Sie Schlaf mit Minuten und Sekunden

15

Ich kann Schlaf 5m für 5 Minuten benutzen.

Wie würde ich es für 7 Minuten 30 Sekunden sagen?

fixit7
quelle

Antworten:

31

Aus der Manpage :

Halten Sie bei zwei oder mehr Argumenten für die Zeit an, die durch die Summe ihrer Werte angegeben wird .

So:

sleep 7m 30s
PerlDuck
quelle
2
Schön, ich muss die Manpages genauer lesen ...
Ravexina
4
Es könnte erwähnenswert sein, dass dies bashintegriertes und GNU- sleep Verhalten ist. POSIXly, sleepist nur erforderlich, um Ganzzahlen als Sekunden zu verstehen
Sergiy Kolodyazhnyy
17

Ein anderer Weg, dies zu tun, ist:

sleep 7.5m

man sleep

Im Gegensatz zu den meisten Implementierungen, bei denen NUMBER eine Ganzzahl sein muss, kann NUMBER hier eine beliebige Gleitkommazahl sein.

Ravexina
quelle
10

Es gibt bereits zwei ausgezeichnete Antworten, aber ich würde gerne etwas erweitern. Kopieren Sie den folgenden Befehl und fügen Sie ihn in Ihr Terminal ein:

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

Dies startet einen zweiten Prozess, der 3 Tage, 5 Stunden, 7 Minuten und 30,05 Sekunden lang ruht. Die Prozess-ID (PID) ist 7321in meinem Fall.

Bestätigen Sie die PID mit

$ 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

Der erste Eintrag ist der, an dem wir interessiert sind. Der zweite Eintrag ist für ein permanentes Programm, das ich beim Start ausgeführt habe. Der dritte Eintrag bezieht sich auf den Befehl grep.

Um nun zu sehen, wie viel Zeit (in Sekunden) für den sleepvon PID generierten Befehl verbleibt, 7321können wir Folgendes verwenden: Wie kann man die verbleibende Zeit in einem "Schlaf" bestimmen? Befehl:

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

Der Code für den Befehl, den Sie in Ihre ~/.bashrcDatei aufnehmen können:

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'
}
WinEunuuchs2Unix
quelle
Meine verbleibende Zeit funktioniert nicht. andy @ 7_ ~ $ residual_sleep_time 7321 residual_sleep_time: Befehl nicht gefunden
fixit7
1
@ fixit7 remaining_sleep_timemuss ~/.bashrcgemäß dem Link in Ihre Datei kopiert werden . Sie können den Code auch in eine Bash-Skriptdatei einfügen.
WinEunuuchs2Unix
5

Der Befehl sleep zählt immer in Sekunden. Sie können ((7x60) +30) Sekunden verwenden und dann einfach Folgendes eingeben:

Schlaf 450

dschinn1001
quelle
3
Wie bereits erwähnt , versteht sleep in der Tat immer Sekunden, aber im Fall von GNU sleep und Bash shell (bei ksh und zsh nicht sicher) lassen diese auch Buchstabenargumente zu, wie in anderen Antworten angegeben. Ihre Antwort könnte mit der Verwendung von Shell-Arithmetik-Erweiterung verbessert werden, so dass so etwas sleep $((60*7))für Minuten verwendet werden könnte
Sergiy Kolodyazhnyy