Выполнить команду с аргументами несколько раз [дубликат]

На этот вопрос уже есть ответ здесь:

У меня есть файл с некоторыми параметрами сценария:

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

Мне нужно запускать сценарий один раз для каждой строки в этом файле, передавая строку как аргумент сценария, поэтому он должен работать:

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

Как можно Я достигаю этого с помощью Bash?

3
задан 12 June 2017 в 18:00

2 ответа

Команда

xargs, которая создается для запуска команды с аргументами, которые считываются из stdin, имеет параметр --arg-file, который позволяет читать аргументы из файла. В сочетании с флагом -L1 он будет считывать файл аргументов построчно и для каждой строки выполнять команду. Вот пример:

$ cat args.txt
one two three
four file six

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

Замените echo вашим скриптом.

Кроме того, вы всегда можете перенаправить файл для чтения с помощью xargs из потока stdin следующим образом:

$ xargs -L1  echo < args.txt                                                                                             
one two three
four file six
6
ответ дан 1 December 2019 в 13:05

Используя цикл 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 < "$1"

Затем вызовите этот скрипт anything.sh и запустите его так:

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

Не забудьте сделать и anything.sh, и [ 115] исполняемый файл

5
ответ дан 1 December 2019 в 13:05

Другие вопросы по тегам:

Похожие вопросы: