Comment passer la sortie d'une commande en tant que plusieurs arguments à une autre commande


12

J'ai une commande qui produit une sortie comme celle-ci:

$. / command1
mot1 mot2 mot3

Je veux passer ces trois mots comme arguments à une autre commande comme celle-ci:

$ command2 mot1 mot2 mot3

Comment passer la sortie command1 en trois arguments différents $ 1 $ 2 $ 3 à command2?

Réponses:


8

Vous pouvez utiliser xargs, avec le -tdrapeau xargssera verbeux et imprime les commandes qu'il exécute:

./command1 | xargs -t -n1 command2

-n1définit le maximum d'arguments transmis à chaque appel de command2. Cela exécutera:

command2 word1
command2 word2
command2 word3

Si vous voulez tous comme argument d'un seul appel d' command2utilisation:

./command1 | xargs -t command2

Cela appelle command2 avec 3 arguments:

command2 word1 word2 word3

Que faire si la sortie de command1 est plus longue que ARG_MAX? J'ai un scénario où je passe le contenu d'un fichier à une fonction.
0xc0de

4

Vous voulez une «substitution de commande», c'est-à-dire: intégrer la sortie d'une commande dans une autre

command2 $(command1)

Traditionnellement, cela peut également se faire comme suit:

command2 `command1`

mais cette utilisation n'est normalement pas recommandée, car vous ne pouvez pas les imbriquer.

Par exemple:

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

test2.sh

#!/bin/bash
echo $2

UTILISATION:

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

Si je fais cela, il passe la sortie command1 en un seul argument, pas comme trois différents: $ command2 $ (cat output_from_command1)
Addy

ah oui, une seconde ... btw cat n'est pas nécessaire dans celui que vous y mettez.
Sirex

Travaille pour moi. Si ma commande2 fait écho à $ 2 (i, e: deuxième argument), j'obtiens "word2" comme prévu.
Sirex

0

Je suppose que cela vous aide

command1 | commande xargs2

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.