Comment exécuter une commande à plusieurs reprises avec différents arguments?

11

Je suis sur Ubuntu. J'ai copié certains arguments (séparés par un retour à la ligne) et je peux utiliser xsel pour les imprimer comme ceci

$ xsel
arg1
arg2
arg3
arg4
...

Maintenant, je veux utiliser chacun de ces arguments pour une autre commande et exécuter cette commande autant de fois qu'il y a d'arguments.

J'ai donc essayé

$ xsel | mycommand "constantArgument" $1

Cependant, cela mycommandn'a été exécuté que pour le premier argument. Comment puis-je l'exécuter pour chaque argument?

Nous s
la source
Modification de la question pour refléter le fait qu'il existe plusieurs arguments dans ma commande.
Wes

Réponses:

12

Vous pouvez simplement utiliser xargs

xsel | xargs -n1 echo mycommand 

-n1 signifie un argument pour ma commande, mais c'est juste un essai à sec, il montrera ce qui va être exécuté, pour l'exécuter supprimer echo

Pour un argument constant

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}
Rahul Patil
la source
Que faire si "ma commande" attend plus d'un argument dont xsel ne contient qu'un seul argument?
Wes
xsel | xargs -n1 echo mycommand -more-arg
Rahul Patil
xsel | xargs -n2 echo mycommanddeux arguments par commande
Rahul Patil
7
xsel | while read line; do mycommand "$line"; done

Ou quelque chose de similaire. Vous pouvez également utiliser xargs, qui est une commande très puissante pour la manipulation des arguments de ligne de commande.

orion
la source
1

Pour un peu de personnalisation:

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

Vous pouvez supprimer le -noexecutedrapeau après avoir vu comment cela fonctionne.

Si cela fonctionne pour vous, vous pouvez abandonner shentièrement et faire à la place:

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

Ou plus vite:

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

L'une ou l'autre manière est facile et le fera.

mikeserv
la source