254 votes

Comment exécuter une commande plusieurs fois, en utilisant bash Shell ?

Existe-t-il un moyen d'exécuter une commande (par ex. ps aux|grep someprocess ) pour n fois ?

Quelque chose comme :

run -n 10  'ps aux|grep someprocess'

Je veux l'utiliser de manière interactive.

Mise à jour : La raison pour laquelle je pose cette question est que je travaille sur de nombreuses machines et je ne veux pas importer tous mes scripts adaptés etc. dans chaque boîte pour obtenir la même fonctionnalité sur toutes les machines.

17voto

Neil Points 181

Sous macOS, vous pouvez utiliser l'option repeat commandement.

repeat 10 ps aux | grep someprocess

9voto

Rafe Points 4602

Méthode POSIX

http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_04_01

x=10
while [ $x -gt 0 ]; do
    command
    x=$(($x-1))
done

qui pourrait bien sûr être transformé en une phrase d'une minute :

x=10; while [ $x -gt 0 ]; do command; x=$(($x-1)); done

et semble être le moyen le plus portable, et donc moins susceptible de vous faire installer des programmes.

Les suivantes sont moins portables :

  • expansion de l'armature {1..10} : spécifique à bash, et générerait une ligne énorme si l'argument est grand
  • seq : GNU
  • yes : GNU

Et si vous êtes fatigué de la portabilité, considérez GNU parallel :

sudo apt-get install parallel
seq 100 | parallel echo {}

qui exécute les commandes en parallèle et dispose de nombreuses options intéressantes.

Voir aussi : https://stackoverflow.com/questions/169511/how-do-i-iterate-over-a-range-of-numbers-defined-by-variables-in-bash

3voto

Petr Tuma Points 314

Un poisson Shell implémentation de @eduardo-ivanec's run fonction au-dessus de

function run
  set number $argv[1]
  for i in (seq $number)
    eval $argv[2..-1]
  end
end

2voto

Bill Balmant Points 11

Pour exécuter ps aux plusieurs fois en cherchant une chaîne connue différente à chaque fois :

for str in {str1,str2,...}; do ps aux | grep $str | grep -v " grep "; done

Le site grep -v " grep " supprimera grep lui-même du résultat, ce qui est une mauvaise idée si une de vos chaînes de recherche est grep .

1voto

Chris Arnu Points 1

Ce serait 'watch' - devrait faire partie de presque tous les systèmes unix utilisant procps.

Vous pouvez voir les changements de fs ou tout autre mouvement intéressant dans un système. Par exemple,

watch "df -hP | grep /tmp" 

Il suffit de mettre vos commandes en argument (voir man watch )

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X