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


11

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

$ xsel
arg1
arg2
arg3
arg4
...

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

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

$ xsel | mycommand "constantArgument" $1

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


Отредактировал вопрос, чтобы отразить тот факт, что в моей команде более одного аргумента.
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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.