Как выполнить команду повторно с разными аргументами?

11

Я на Ubuntu. Я скопировал некоторые аргументы (разделенные символом новой строки), и я могу использовать xsel, чтобы распечатать их следующим образом

$ xsel
arg1
arg2
arg3
arg4
...

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

Так я попробовал

$ xsel | mycommand "constantArgument" $1

Однако это выполняется mycommandтолько для первого аргумента. Как я могу выполнить это для каждого аргумента?

Wes
источник
Отредактировал вопрос, чтобы отразить тот факт, что в моей команде более одного аргумента.
Wes

Ответы:

12

Вы можете просто использовать xargs

xsel | xargs -n1 echo mycommand 

-n1 означает один аргумент для mycommand, но это просто пробный запуск, он покажет, что будет запущен, чтобы запустить его удалить echo

Для постоянного аргумента

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}
Рахул Патил
источник
Что если mycommand ожидает более одного аргумента, из которых xsel содержит только один аргумент?
Wes
xsel | xargs -n1 echo mycommand -more-arg
Рахул Патил
xsel | xargs -n2 echo mycommandдва аргумента за команду
Рахул Патил
7
xsel | while read line; do mycommand "$line"; done

Или что-то подобное. Вы также можете использовать xargsочень мощную команду для манипулирования аргументами командной строки.

Орион
источник
1

Для небольшой настраиваемости:

printf "${CMD} %s ${ARG2}\n" `xsel` | sh -n

Вы можете удалить -noexecuteфлаг, когда увидите, как он работает.

Если это работает для вас, вы можете shполностью отказаться и сделать это вместо этого:

. <<HERE /dev/stdin
    $(printf "${CMD} %s ${ARG2}\n" `xsel`)
HERE

Или быстрее:

printf "${CMD} %s ${ARG2}\n" `xsel` | . /dev/stdin

В любом случае легко и будет делать это.

mikeserv
источник