Odpowiedzi:
Z strony podręcznika :
Biorąc pod uwagę dwa lub więcej argumentów, zatrzymaj się na czas określony przez sumę ich wartości .
Więc:
sleep 7m 30s
bashwbudowane i sleep zachowanie GNU . POSIXly sleepjest wymagany tylko do zrozumienia liczb całkowitych w sekundach
Istnieją już dwie doskonałe odpowiedzi, ale chciałbym trochę rozwinąć. Skopiuj i wklej poniższe polecenie do terminala:
$ sleep 3d 5h 7m 30.05s &
[1] 7321
Rozpocznie się drugi proces, który będzie spał przez 3 dni, 5 godzin, 7 minut i 30,05 sekundy. Identyfikator procesu (PID) jest 7321w moim przypadku.
Aby potwierdzić użycie 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
Pierwszy wpis jest tym, który nas interesuje. Drugi wpis dotyczy stałego programu, który mam uruchomiony podczas uruchamiania. Trzeci wpis dotyczy samego polecenia grep.
Teraz, aby zobaczyć, ile czasu pozostało (w sekundach) na sleeppolecenie wygenerowane przez PID 7321, możemy użyć tego: Jak określić czas pozostały do „snu”? Komenda:
$ remaining_sleep_time 7321
277304.05
$ remaining_sleep_time 7321
277296.05
$ remaining_sleep_time 7321
277262.05
Kod polecenia, które możesz dołączyć do ~/.bashrcpliku:
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'
}
remaining_sleep_timenależy skopiować do ~/.bashrcpliku zgodnie z linkiem. Możesz także umieścić kod w pliku skryptu bash.
Sen poleceń zawsze liczy się w sekundach. Możesz użyć ((7x60) +30) sekund, a następnie po prostu wpisać:
spać 450
sleep $((60*7))można wykorzystać przez kilka minut