Come passare l'output del comando come più argomenti a un altro comando


13

Ho un comando che produce un output come questo:

$. / comando1
parola1 parola2 parola3

Voglio passare queste tre parole come argomenti a un altro comando come questo:

$ command2 word1 word2 word3

Come passare l'output di command1 come tre diversi argomenti $ 1 $ 2 $ 3 a command2?

Risposte:


9

Puoi usare xargs, con il -tflag xargssarà verboso e stampa i comandi che esegue:

./command1 | xargs -t -n1 command2

-n1definisce gli argomenti massimi passati ad ogni chiamata di command2. Questo eseguirà:

command2 word1
command2 word2
command2 word3

Se vuoi tutto come argomento di un call of command2use che:

./command1 | xargs -t command2

Che chiama command2 con 3 argomenti:

command2 word1 word2 word3

Cosa succede se l'output di command1 è più lungo di ARG_MAX? Ho uno scenario in cui sto passando i contenuti di un file a una funzione.
0xc0de,

4

Volete "sostituzione dei comandi", ovvero: incorporare l'output di un comando in un altro

command2 $(command1)

Tradizionalmente questo può anche essere fatto come:

command2 `command1`

ma questo utilizzo non è normalmente raccomandato, in quanto non è possibile nidificarli.

Per esempio:

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

test2.sh

#!/bin/bash
echo $2

USO:

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

Se lo faccio, sta passando l'output command1 come un singolo argomento, non come tre diversi: $ command2 $ (cat output_from_command1)
Addy

ah giusto, un secondo ... ma non è necessario il gatto in quello che hai messo lì.
Sirex,

Per me va bene. Se il mio comando2 echo $ 2 (i, e: secondo argomento) ottengo "word2" come previsto.
Sirex,

0

Immagino che questo ti aiuti

comando1 | comando xargs2

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.