Como passar a saída do comando como vários argumentos para outro comando

8

Eu tenho um comando que produz uma saída assim:

$. / command1
word1 word2 word3

Eu quero passar essas três palavras como argumentos para outro comando como este:

$ command2 word1 word2 word3

Como passar a saída do comando1 como três argumentos diferentes $ 1 $ 2 $ 3 para o comando2?

Obrigado antecipadamente.

    
por Addy 04.11.2014 / 19:39

3 respostas

6

Você pode usar xargs , com -t flag xargs será detalhado e exibirá os comandos que ele executa:

./command1 | xargs -t -n1 command2

-n1 define os argumentos máximos transmitidos para todas as chamadas de command2 . Isto irá executar:

command2 word1
command2 word2
command2 word3

Se você quiser tudo como argumento de uma chamada de command2 use isso:

./command1 | xargs -t command2

Isso chama o comando2 com 3 argumentos:

command2 word1 word2 word3
    
por 04.11.2014 / 20:38
2

Você quer 'substituição de comando', isto é, integra a saída de um comando em uma outra

command2 $(command1)

Tradicionalmente, isso também pode ser feito como:

command2 'command1'

mas esse uso normalmente não é recomendado, pois você não pode animá-los.

Por exemplo:

test.sh:
#!/bin/bash
echo a b c

test2.sh

#!/bin/bash
echo $2

USO:

./test2.sh $(./test.sh)
b
    
por 04.11.2014 / 19:42
0

Acho que isso ajuda você

command1 | comando xargs2

    
por 04.11.2014 / 19:49