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