C'è un comando Unix integrato repeat
il cui primo argomento è il numero di volte per ripetere un comando, dove il comando (con qualsiasi argomento) è specificato dagli argomenti rimanenti da repeat
.
Ad esempio,
% repeat 100 echo "I will not automate this punishment."
farà eco alla stringa data 100 volte e poi si fermerà.
Vorrei un comando simile:chiamiamolo forever
– funziona in modo simile tranne che il primo argomento è il numero di secondi di pausa tra le ripetizioni e si ripete all'infinito. Ad esempio,
% forever 5 echo "This will get echoed every 5 seconds forever and ever."
Ho pensato di chiedere se esiste una cosa del genere prima di scriverla. So che è come uno script Perl o Python a 2 righe, ma forse c'è un modo più standard per farlo. In caso contrario, sentiti libero di pubblicare una soluzione nel tuo linguaggio di scripting preferito.
PS:Forse un modo migliore per farlo sarebbe generalizzare repeat
per prendere sia il numero di volte da ripetere (con -1 che significa infinito) sia il numero di secondi per dormire tra le ripetizioni.
Gli esempi precedenti diventerebbero quindi:
% repeat 100 0 echo "I will not automate this punishment."
% repeat -1 5 echo "This will get echoed every 5 seconds forever."
Risposta accettata:
Prova l'watch
comando.
Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>]
[--no-title] [--version] <command>`
In modo che:
watch -n1 command
eseguirà il comando ogni secondo (beh, tecnicamente, ogni secondo più il tempo impiegato per command
da eseguire come watch
(almeno il procps
e busybox
implementazioni) dorme solo un secondo tra due esecuzioni di command
), per sempre.
Vorresti passare il comando a exec
invece di sh -c
, usa -x
opzione:
watch -n1 -x command
Su macOS, puoi ottenere watch
dalle porte Mac:
port install watch
Oppure puoi ottenerlo da Homebrew:
brew install watch