Como executar um comando repetidamente com diferentes argumentos?

11

Estou no Ubuntu. Eu copiei alguns argumentos (separados por nova linha) e posso usar xsel para imprimi-los assim

$ xsel
arg1
arg2
arg3
arg4
...

Agora, quero usar cada um desses argumentos para outro comando e executar esse comando quantas vezes houver argumentos.

Então eu tentei

$ xsel | mycommand "constantArgument" $1

No entanto, isso executou mycommand apenas para o primeiro argumento. Como posso executá-lo para cada argumento?

    
por Wes 19.03.2014 / 20:59

3 respostas

12

Você pode simplesmente usar xargs

xsel | xargs -n1 echo mycommand 

-n1 significa um arg para mycommand, mas é apenas dry run, ele mostrará o que vai ser executado, para executá-lo remova echo

Para argumento constante

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}
    
por 19.03.2014 / 21:06
7
xsel | while read line; do mycommand "$line"; done

Ou algo similar. Você também pode usar xargs , que é um comando muito poderoso para manipulação de argumentos de linha de comando.

    
por 19.03.2014 / 21:02
1

Para um pouco de personalização:

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

Você pode remover o sinalizador -noexecute depois de ver como funciona.

Se funcionar, você pode soltar sh completamente e fazer isso:

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

Ou mais rápido:

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

De qualquer maneira é fácil e vai fazer isso.

    
por 20.03.2014 / 10:45