Запускать команду с аргументами несколько раз
Я получил файл с некоторыми параметрами скрипта:
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?
2 ответа
xargs
Команда, которая создается для запуска команды с аргументами, которые считываются из стандартного ввода, имеет --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
Используя 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
а также MyScript.sh
исполнимый