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


12

Eu tenho um comando que produz uma saída como esta:

$. /
command1 palavra1 palavra2 palavra3

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

$ command2 palavra1 palavra2 palavra3

Como passar a saída command1 como três argumentos diferentes $ 1 $ 2 $ 3 para command2?

Respostas:


8

Você pode usar xargs, com o -tsinalizador xargsserá detalhado e imprime os comandos que ele executa:

./command1 | xargs -t -n1 command2

-n1define o máximo de argumentos passados ​​para cada chamada de command2. Isto irá executar:

command2 word1
command2 word2
command2 word3

Se você quiser tudo como argumento de uma chamada de command2uso, isso:

./command1 | xargs -t command2

Isso chama command2 com 3 argumentos:

command2 word1 word2 word3

E se a saída do comando1 for maior que ARG_MAX? Eu tenho um cenário em que estou passando o conteúdo de um arquivo para uma função.
0xc0de 19/02/19

4

Você quer 'substituição de comando', ou seja: incorpora a saída de um comando em outro

command2 $(command1)

Tradicionalmente, isso também pode ser feito como:

command2 `command1`

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

Por exemplo:

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

test2.sh

#!/bin/bash
echo $2

USAR:

./test2.sh $(./test.sh)
b

Se eu fizer isso, ele está passando a saída command1 como um único argumento, não como três diferentes: $ command2 $ (output_from_command1 cat)
Addy

ah certo, um segundo ... btw gato não é necessário naquele que você coloca lá.
Sirex

Funciona para mim. Se meu command2 ecoar $ 2 (i, e: segundo argumento), recebo "word2" conforme o esperado.
Sirex

0

Eu acho que isso ajuda você

command1 | xargs command2

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.