¿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?


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

¿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.


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á.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.