XARGS с несколькими аргументами - PullRequest
50 голосов
/ 22 сентября 2010

У меня есть источник ввода, input.txt

a.txt
b.txt
c.txt

Я хочу передать эти данные в программу следующим образом:

my-program --file=a.txt --file=b.txt --file=c.txt

Поэтому я пытаюсь использовать xargs , но безуспешно.

cat input.txt | xargs -i echo "my-program --file"{}

Даёт

my-program --file=a.txt
my-program --file=b.txt
my-program --file=c.txt

Но я хочу

my-program --file=a.txt --file=b.txt --file=c.txt

Есть идеи?

Ответы [ 12 ]

0 голосов
/ 10 января 2018

На самом деле, это относительно просто:

... | sed 's/^/--prefix=/g' | xargs echo | xargs -I PARAMS your_cmd PARAMS

sed 's/^/--prefix=/g' является необязательным, на случай, если вам нужно добавить к каждому параметру префикс --prefix =.

xargs echo превращает список строк параметров (по одному параметру в каждой строке) в список параметров в одной строке, а xargs -I PARAMS your_cmd PARAMS позволяет запускать команду, размещая параметры в любом месте.

Итак, cat input.txt | sed 's/^/--file=/g' | xargs echo | xargs -I PARAMS my-program PARAMS делает то, что вам нужно (при условии, что все строки в input.txt просты и квалифицируются как одно значение параметра каждая).

0 голосов
/ 23 декабря 2014

Никто еще не упомянул эхо от цикла, поэтому я добавлю это для полноты картины (это будет мой второй подход, первый - sed):

for line in $(< input.txt) ; do echo --file=$line ; done | xargs echo my-program
...