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
bash
wbudowane i sleep
zachowanie GNU . POSIXly sleep
jest 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 7321
w 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 sleep
polecenie 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 ~/.bashrc
pliku:
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_time
należy skopiować do ~/.bashrc
pliku 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