Como executar um comando repetidamente com argumentos diferentes?

11

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

$ xsel
arg1
arg2
arg3
arg4
...

Agora, quero usar cada um desses argumentos para outro comando e executá-lo quantas vezes houver argumentos.

Então eu tentei

$ xsel | mycommand "constantArgument" $1

No entanto, isso foi executado mycommandapenas para o primeiro argumento. Como posso executá-lo para todos os argumentos?

Wes
fonte
Editou a pergunta para refletir o fato de que há mais de um argumento no meu comando.
19414 Wes Wes

Respostas:

12

Você pode simplesmente usar xargs

xsel | xargs -n1 echo mycommand 

-n1 significa um argumento para o meu comando, mas é apenas execução a seco, mostra o que será executado, remove echo

Para argumento constante

xsel | xargs -I {} -n1 echo mycommand "constantArgument" {}
Rahul Patil
fonte
E se "mycommand" espera mais de um argumento do qual o xsel contenha apenas um argumento?
19414 Wes Wes
xsel | xargs -n1 echo mycommand -more-arg
Rahul Patil
xsel | xargs -n2 echo mycommanddois argumentos por comando
Rahul Patil
7
xsel | while read line; do mycommand "$line"; done

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

orion
fonte
1

Para um pouco de personalização:

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

Você pode remover a -noexecutebandeira depois de ver como ela funciona.

Se funcionar para você, você pode eliminar shcompletamente e fazer o seguinte:

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

mikeserv
fonte