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?

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

¿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

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

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.