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?


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" {}

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.


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.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.