GNU/Linux >> Tutoriels Linux >  >> Linux

Comment exécuter une commande plusieurs fois à l'aide du shell bash ?

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


Linux
  1. Comment exécuter ou répéter une commande Linux toutes les X secondes pour toujours

  2. [Linux] :Comment exclure un répertoire lors de l'utilisation de la commande shell "tar"

  3. Comment ajouter plusieurs routes sous Linux à l'aide d'exemples de commande ip

  4. Comment configurer le shell bash restreint sous Linux

  5. Comment exécuter un script shell sur une console Unix ou un terminal Mac ?

Comment exécuter plusieurs commandes Linux en une seule commande

Comment exécuter un script bash

Comment exécuter plusieurs commandes Linux à la fois dans le terminal Linux

Utilisation de la commande Watch sous Linux

Utilisation de la fonctionnalité d'historique sur Bash Shell sur le serveur Ubuntu 16.04 LTS

Comment modifier les lignes précédentes dans une commande à plusieurs lignes dans Bash ?