Solution 1 :
Je ne pense pas qu'une commande ou un shell intégré pour cela existe, car c'est un sous-ensemble trivial de ce que le shell Bourne for
loop est conçu pour et implémenter vous-même une commande comme celle-ci est donc assez simple.
Selon la suggestion de JimB, utilisez la fonction intégrée Bash pour générer des séquences :
for i in {1..10}; do command; done
Pour les très anciennes versions de bash, vous pouvez utiliser le seq
commande :
for i in `seq 10`; do command; done
Cela itère dix fois en exécutant command
à chaque fois - il peut s'agir d'un tube ou d'une série de commandes séparées par ;
ou &&
. Vous pouvez utiliser le $i
variable pour savoir à quelle itération vous vous trouvez.
Si vous considérez ce one-liner comme un script et donc pour une raison non spécifiée (mais peut-être valable) indésirable, vous pouvez l'implémenter en tant que commande, peut-être quelque chose comme ceci sur votre .bashrc (non testé):
#function run
run() {
number=$1
shift
for i in `seq $number`; do
[email protected]
done
}
Utilisation :
run 10 command
Exemple :
run 5 echo 'Hello World!'
Solution 2 :
ps aux | grep someprocess
semble vouloir regarder les changements d'un programme pendant une durée déterminée. Eduardo a donné une réponse qui répond exactement à votre question mais il y a une alternative :watch
:
watch 'ps aux | grep someprocess'
Notez que j'ai mis la commande entre guillemets simples pour éviter que le shell interprète la commande comme "run watch ps aux" et dirige le résultat via grep someprocess
. Une autre façon de faire la commande précédente serait :
watch ps aux \| grep someprocess
Par défaut, watch
rafraîchit toutes les deux secondes, cela peut être changé en utilisant le -n
option. Par exemple, si vous voulez avoir un intervalle de 1 seconde :
watch -n 1 'ps aux | grep someprocess'
Solution 3 :
Juste pour le plaisir
pgrep ssh ;!!;!!;!!;!!;!!;!!
Solution 4 :
Essayez ceci :
yes ls | head -n5 | bash
Cela nécessite que la commande soit exécutée dans un sous-shell, une légère pénalité de performance. YMMV. Fondamentalement, vous obtenez la commande "yes" pour répéter la chaîne "ls" N fois ; tandis que "head -n5" terminait la boucle à 5 répétitions. Le tube final envoie la commande au shell de votre choix.
Accessoirement csh
-like shells ont un repeat
intégré commande. Vous pouvez l'utiliser pour exécuter votre commande dans un sous-shell bash !
Solution 5 :
similaire aux réponses précédentes, mais ne nécessite pas la boucle for :
seq 10 | xargs -I -- echo "hello"
canaliser la sortie de seq vers xargs sans arguments ni options