Il y a une commande Unix intégrée repeat
dont le premier argument est le nombre de fois pour répéter une commande, où la commande (avec tous les arguments) est spécifiée par les arguments restants à repeat
.
Par exemple,
% repeat 100 echo "I will not automate this punishment."
fera écho à la chaîne donnée 100 fois puis s'arrêtera.
Je voudrais une commande similaire - appelons-la forever
- qui fonctionne de la même manière sauf que le premier argument est le nombre de secondes de pause entre les répétitions, et il se répète indéfiniment. Par exemple,
% forever 5 echo "This will get echoed every 5 seconds forever and ever."
J'ai pensé que je demanderais si une telle chose existe avant de l'écrire. Je sais que c'est comme un script Perl ou Python à 2 lignes, mais il existe peut-être une manière plus standard de le faire. Sinon, n'hésitez pas à publier une solution dans votre langage de script préféré.
PS :Peut-être qu'une meilleure façon de procéder serait de généraliser repeat
pour prendre à la fois le nombre de répétitions (avec -1 signifiant l'infini) et le nombre de secondes de sommeil entre les répétitions.
Les exemples ci-dessus deviendraient alors :
% repeat 100 0 echo "I will not automate this punishment."
% repeat -1 5 echo "This will get echoed every 5 seconds forever."
Réponse acceptée :
Essayez la watch
commande.
Usage: watch [-dhntv] [--differences[=cumulative]] [--help] [--interval=<n>]
[--no-title] [--version] <command>`
Ainsi :
watch -n1 command
exécutera la commande toutes les secondes (enfin, techniquement, toutes les secondes plus le temps qu'il faut pour la command
à exécuter en tant que watch
(au moins le procps
et busybox
implémentations) ne dort qu'une seconde entre deux exécutions de la command
), pour toujours.
Souhaitez-vous passer la commande à exec
au lieu de sh -c
, utilisez -x
choix :
watch -n1 -x command
Sur macOS, vous pouvez obtenir watch
depuis les ports Mac :
port install watch
Ou vous pouvez l'obtenir auprès de Homebrew :
brew install watch