Usa il sonno con minuti e secondi


16

So usare il sonno 5m per 5 minuti.

Come lo userei per dire 7 minuti e 30 secondi?

Risposte:


32

Dalla manpage :

Dati due o più argomenti, mettere in pausa per il tempo specificato dalla somma dei loro valori .

Così:

sleep 7m 30s

2
Bene

4
Vale la pena notare che si tratta di un comportamento bashintegrato e GNU sleep. POSIXly, sleepè necessario solo per capire i numeri interi come secondi
Sergiy Kolodyazhnyy

17

Un altro modo per farlo è:

sleep 7.5m

man sleep

A differenza della maggior parte delle implementazioni che richiedono che NUMBER sia un numero intero, qui NUMBER può essere un numero in virgola mobile arbitrario.


10

Ci sono già due risposte eccellenti, ma vorrei espandermi un po '. Copia e incolla il comando qui sotto nel tuo terminale:

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

Questo avvierà un secondo processo che dormirà per 3 giorni, 5 ore, 7 minuti e 30,05 secondi. L'ID processo (PID) è7321 nel mio caso.

Per confermare l'uso del 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

La prima voce è quella a cui siamo interessati. La seconda voce è per un programma permanente che ho in esecuzione all'avvio. La terza voce è per il comando grep stesso.

Ora per vedere quanto tempo rimane (in secondi) per il sleepcomando generato da PID 7321, possiamo usare questo: Come determinare il tempo rimanente in uno "sleep"? comando:

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

Il codice per il comando che puoi includere nel tuo ~/.bashrcfile:

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'
}

Il tempo rimanente non funziona. andy @ 7_ ~ $ rimanendo_sleep_time 7321 rimanendo_sleep_time: comando non trovato
fixit7

1
@ fixit7 remaining_sleep_timedeve essere copiato nel tuo ~/.bashrcfile come da link. È inoltre possibile inserire il codice in un file di script bash.
WinEunuuchs2Unix

5

Il comando sleep è sempre conteggiato in secondi. È possibile utilizzare ((7x60) +30) secondi e quindi digitare semplicemente:

dormire 450


3
Come notato in precedenza , sleep capisce sempre sempre i secondi, ma in caso di GNU sleep e Bash shell (non sono sicuro di ksh e zsh) - quelli permettono anche argomenti di lettere come indicato in altre risposte. La tua risposta potrebbe essere migliorata usando l'espansione aritmetica della shell, quindi qualcosa di simile sleep $((60*7))potrebbe essere usato per minuti
Sergiy Kolodyazhnyy
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.