Як виконувати команду кілька разів з різними аргументами?


11

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

$ xsel
arg1
arg2
arg3
arg4
...

Тепер я хочу використовувати кожен з цих аргументів для іншої команди і виконувати цю команду стільки разів, скільки є аргументів.

Тому я спробував

$ xsel | mycommand "constantArgument" $1

Однак це виконується mycommandлише для першого аргументу. Як я можу виконати його для кожного аргументу?


Відредагував це питання, щоб відобразити той факт, що в моїй команді є більше одного аргументу.
Уес

Відповіді:


12

Ви можете просто використовувати xargs

xsel | xargs -n1 echo mycommand 

-n1 означає один аргумент для моєї команди, але це просто сухий запуск, він покаже, що буде запущено, запустити його видалити echo

За постійний аргумент

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}

Що робити, якщо "mycommand" очікує більше одного аргументу, з якого xsel містить лише один аргумент?
Уес

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.