Можно ли указать количество аргументов, принимаемых xargs не делая этого явно с опцией -n , но неявно с разделителем, чтобы отдельные параметры были разделены пробелом, но группа аргументов, которые xargs принимает сразу, быть разделены, например '\n'

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

param1 param2
param1 param2 param3
param1

Должна быть возможность передавать одну строку параметров за раз в сценарий. Я не хочу использовать прокси-скрипты и не хочу записывать временный список файлов или команд на диск. Я хочу прочитать параметры из файла, изменить их "на лету" (например, удалить все остальные строки) и перенаправить их с помощью xargs в целевой сценарий.

Я попытался использовать '\n' в качестве разделителя аргументов, но все параметры строки интерпретируются как один аргумент, даже если они разделены пробелом.

2 ответа2

1

С помощью GNU Parallel вы можете делать:

cat yourfile | parallel -q bash -c 'echo {}'

Если допустимо, чтобы параметры были объединены в один, то вы даже можете сделать:

cat yourfile | parallel echo {}

Вы можете установить GNU Parallel просто:

wget http://git.savannah.gnu.org/cgit/parallel.git/plain/src/parallel
chmod 755 parallel
cp parallel sem

Посмотрите вступительные видео для GNU Parallel, чтобы узнать больше:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

0

Q

Я хочу добиться, чтобы следующий список проходил через xargs, но по одной строке за раз:

A

$ cat t7.txt
param1 param2
param1 param2 param3
param1

$ cat t7.sh
#!/bin/bash
cat t7.txt | while read line
do
  echo $line | xargs echo XXX
done

$ ./t7.sh
XXX param1 param2
XXX param1 param2 param3
XXX param1

Но есть более простые способы добиться этого без использования xargs, поэтому вы можете уточнить свой вопрос.


Обновить

$ while read line; do echo "< $line >"; done
p1 p2
< p1 p2 >
p1
< p1 >
p1 p2 p3
< p1 p2 p3 >

Я не думаю, что XARGS является ответом на вашу задачу. Я подозреваю, что вам лучше использовать какой-нибудь скрипт вместо xargs.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .