Cómo pasar la salida del comando como varios argumentos a otro comando

12

Tengo un comando que produce una salida como esta:

$. / comando1
palabra1 palabra2 palabra3

Quiero pasar estas tres palabras como argumentos a otro comando como este:

$ comando2 palabra1 palabra2 palabra3

¿Cómo pasar la salida de command1 como tres argumentos diferentes $ 1 $ 2 $ 3 a command2?

Addy
fuente

Respuestas:

8

Puede usar xargs, con la -tbandera xargsserá detallada e imprime los comandos que ejecuta:

./command1 | xargs -t -n1 command2

-n1define los argumentos máximos pasados ​​a cada llamada de command2. Esto ejecutará:

command2 word1
command2 word2
command2 word3

Si quiere todo como argumento de una llamada de command2uso que:

./command1 | xargs -t command2

Eso llama a command2 con 3 argumentos:

command2 word1 word2 word3
caos
fuente
¿Qué pasa si la salida de command1 es más larga que ARG_MAX? Tengo un escenario en el que paso contenido de un archivo a una función.
0xc0de
4

Desea 'sustitución de comando', es decir: incrustar la salida de un comando en otro

command2 $(command1)

Tradicionalmente, esto también se puede hacer como:

command2 `command1`

pero este uso no se recomienda normalmente, ya que no puedes anidarlos.

Por ejemplo:

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

test2.sh

#!/bin/bash
echo $2

UTILIZAR:

./test2.sh $(./test.sh)
b
Sirex
fuente
Si hago eso, pasa la salida de command1 como un solo argumento, no como tres diferentes: $ command2 $ (cat output_from_command1)
Addy
ah cierto, un segundo ... por cierto no se necesita gato en el que pones allí.
Sirex
Funciona para mi. Si mi comando2 echos $ 2 (i, e: segundo argumento) obtengo "word2" como se esperaba.
Sirex
0

Supongo que esto te ayuda

comando1 | comando xargs2

PoLIVoX
fuente