4 votes

Exécuter une commande avec des arguments plusieurs fois

J'ai un fichier avec des paramètres d'un script :

foo1 a b c
foo2 a b c
foo3 a b c

J'ai besoin de lancer un script une fois pour chaque ligne de ce fichier en passant la ligne comme script arg, donc ça devrait le faire :

./MyScript.sh foo1 a b c
./MyScript.sh foo2 a b c
./MyScript.sh foo3 a b c

Comment puis-je réaliser cela en utilisant Bash ?

7voto

Sergiy Kolodyazhnyy Points 97292

xargs qui est créée pour exécuter une commande avec des arguments lus à partir de stdin a un --arg-file qui permet de lire les arguments à partir d'un fichier. En combinaison avec -L1 il lira votre fichier d'arguments ligne par ligne, et pour chaque ligne exécutera la commande. Voici un exemple :

$ cat args.txt
one two three
four file six

$ xargs -L1 --arg-file=args.txt echo                       
one two three
four file six

Remplacer echo avec votre script.

Alternativement, vous pouvez toujours rediriger le fichier pour être lu par xargs à partir du flux stdin comme ceci :

$ xargs -L1  echo < args.txt                                                                                             
one two three
four file six

5voto

George Udosen Points 33267

Utilisation d'un while boucle :

#!/bin/bash
while IFS= read -r line; do
   # if the line read is empty 
   # go to the next line. Skips empty lines
   if [ -z "${line}" ]
   then
       continue
   fi
  /path/to/MyScript.sh $line
done < "$1"

Puis appelez ce script. anything.sh et l'exécuter comme ceci :

anything.sh /path/to/file/with/foo

N'oubliez pas de faire les deux anything.sh y MyScript.sh exécutable

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