¿Cómo ejecutar un comando repetidamente con diferentes argumentos?

11

Estoy en Ubuntu Copié algunos argumentos (separados por nueva línea) y puedo usar xsel para imprimirlos así

$ xsel
arg1
arg2
arg3
arg4
...

Ahora, quiero usar cada uno de estos argumentos para otro comando y ejecutar ese comando tantas veces como haya argumentos.

Así que lo intenté

$ xsel | mycommand "constantArgument" $1

Sin embargo, esto se ejecutó mycommandsolo para el primer argumento. ¿Cómo puedo ejecutarlo para cada argumento?

Wes
fuente
Edité la pregunta para reflejar el hecho de que hay más de un argumento para mycommand.
Wes

Respuestas:

12

Simplemente puedes usar xargs

xsel | xargs -n1 echo mycommand 

-n1 significa un argumento para mycommand, pero es solo una ejecución en seco, mostrará lo que se ejecutará, para ejecutarlo eliminar echo

Para un argumento constante

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}
Rahul Patil
fuente
¿Qué sucede si "mycommand" espera más de un argumento del cual el xsel contiene solo un argumento?
Wes
xsel | xargs -n1 echo mycommand -more-arg
Rahul Patil
xsel | xargs -n2 echo mycommanddos argumentos por comando
Rahul Patil
7
xsel | while read line; do mycommand "$line"; done

O algo similar. También puede usar xargs, que es un comando muy poderoso para la manipulación de argumentos de línea de comando.

Orión
fuente
1

Para un poco de personalización:

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

Puede eliminar la -noexecutebandera después de haber visto cómo funciona.

Si funciona para usted, puede soltarlo shcompletamente y hacer esto en su lugar:

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

O más rápido:

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

De cualquier manera es fácil y lo hará.

mikeserv
fuente