Hay un comando integrado de Unix repeat
cuyo primer argumento es el número de veces que se repite un comando, donde el comando (con cualquier argumento) se especifica mediante los argumentos restantes para repeat
.
Por ejemplo,
% repeat 100 echo "I will not automate this punishment."
repetirá la cadena dada 100 veces y luego se detendrá.
Me gustaría un comando similar, llamémoslo forever
– que funciona de manera similar, excepto que el primer argumento es la cantidad de segundos de pausa entre repeticiones, y se repite para siempre. Por ejemplo,
% forever 5 echo "This will get echoed every 5 seconds forever and ever."
Pensé en preguntar si tal cosa existe antes de escribirlo. Sé que es como un script Perl o Python de 2 líneas, pero tal vez haya una forma más estándar de hacerlo. Si no es así, no dude en publicar una solución en su lenguaje de secuencias de comandos favorito.
PD:Tal vez una mejor manera de hacer esto sería generalizar repeat
para tomar tanto la cantidad de veces que se repite (donde -1 significa infinito) como la cantidad de segundos para dormir entre repeticiones.
Los ejemplos anteriores se convertirían en:
% repeat 100 0 echo "I will not automate this punishment."
% repeat -1 5 echo "This will get echoed every 5 seconds forever."
Respuesta aceptada:
Prueba el watch
comando.
Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>]
[--no-title] [--version] <command>`
Entonces que:
watch -n1 command
ejecutará el comando cada segundo (bueno, técnicamente, cada segundo más el tiempo que lleva command
para ejecutar como watch
(al menos el procps
y busybox
implementaciones) solo duerme un segundo entre dos ejecuciones de command
), para siempre.
¿Le gustaría pasar el comando a exec
en lugar de sh -c
, usa -x
opción:
watch -n1 -x command
En macOS, puede obtener watch
desde puertos Mac:
port install watch
O puede obtenerlo de Homebrew:
brew install watch