Con bash builtins, puoi fare:
coproc read -t 10 && wait "$!" || true
Dormire per 10 secondi senza usare sleep . Il coproc è fare in modo che read Lo stdin di è un tubo da cui non uscirà mai nulla. || true è perché wait lo stato di uscita di rifletterà una consegna SIGALRM che causerebbe l'uscita della shell se errexit l'opzione è impostata.
In altre shell:
mksh e ksh93 avere sleep built-in, non ha senso usare qualcos'altro lì (sebbene entrambi supportino anche read -t ).
zsh supporta anche read -t , ma ha anche un wrapper integrato attorno a select() , quindi puoi usare anche:
zmodload zsh/zselect
zselect -t 1000 # centiseconds
Se quello che vuoi è pianificare le cose da eseguire da una sessione di shell interattiva, vedi anche zsh/sched modulo in zsh .
Hai delle alternative a sleep :Sono at e cron . Contrariamente a sleep questi hanno bisogno che tu fornisca l'ora in cui hai bisogno che vengano eseguiti.
-
Assicurati che il
atdil servizio è in esecuzione eseguendoservice atd status.
Ora diciamo che la data è 11:17 UTC; se devi eseguire un comando alle 11:25 UTC, la sintassi è:echo "This is a test" | at 11:25.
Ora tieni presente cheatdper impostazione predefinita non registrerà il completamento dei lavori. Per ulteriori informazioni, fare riferimento a questo collegamento. È meglio che la tua applicazione abbia la propria registrazione. -
Puoi programmare i lavori in
cron, per ulteriori informazioni fare riferimento a:man cronper vedere le sue opzioni ocrontab -eper aggiungere nuovi posti di lavoro./var/log/cronpuò essere controllato per le informazioni sull'esecuzione dei lavori.
Cordiali saluti sleep system call sospende l'esecuzione in corso e la programma w.r.t. l'argomento passato ad esso.
MODIFICA:
Come menzionato da @Gaius, puoi anche aggiungere minuti a at command.Ma diciamo che il tempo è 12:30:30 e ora hai eseguito lo scheduler con now +1 minutes . Anche se è stato specificato 1 minuto, che si traduce in 60 secondi , il at in realtà non aspetta fino a 12:31:30 per eseguire il lavoro, piuttosto esegue il lavoro in 12:31:00 . Le unità di tempo possono essere minutes, hours, days, or weeks . Per ulteriori informazioni, fare riferimento a man at
es:echo "ls" | at now +1 minutes
Alcune altre idee.
top -d10 -n2 >/dev/null
vmstat 10 2 >/dev/null
sar 10 1 >/dev/null
timeout 10s tail -f /dev/null