Execute o comando com args várias vezes [duplicado]

3

Eu recebi um arquivo com alguns parâmetros de um script:

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

Eu preciso executar um script uma vez para cada linha neste arquivo passando a linha como script arg, então deve ser feito:

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

Como posso conseguir isso usando o Bash?

    
por Polletto 12.06.2017 / 14:03

2 respostas

6
O comando

xargs , que é criado para executar um comando com argumentos que são lidos de stdin, possui um parâmetro --arg-file , que permite a leitura de argumentos do arquivo. Em combinação com -L1 flag, ele lerá seu arquivo de argumentos linha por linha e, para cada linha, executará o comando. Aqui está um exemplo:

$ cat args.txt
one two three
four file six

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

Substitua echo pelo seu script.

Como alternativa, você sempre pode redirecionar o arquivo para ser lido por xargs do fluxo de stdin da seguinte forma:

$ xargs -L1  echo < args.txt                                                                                             
one two three
four file six
    
por Sergiy Kolodyazhnyy 12.06.2017 / 14:26
5

Usando um loop while :

#!/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 < ""

Em seguida, chame este script anything.sh e execute-o assim:

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

Lembre-se de tornar os dois anything.sh e MyScript.sh executáveis

    
por George Udosen 12.06.2017 / 14:11