14

I have a command that produce a output like this:

$./command1
word1 word2 word3

I want to pass this three words as arguments to another command like this:

$ command2 word1 word2 word3

How to pass command1 output as three different arguments $1 $2 $3 to command2 ?

BenMorel
  • 4,685
Addy
  • 161

3 Answers3

11

You can use xargs, with the -t flag xargs will be verbose and prints the commands it executes:

./command1 | xargs -t -n1 command2

-n1 defines the maximum arguments passed to every call of command2. This will execute:

command2 word1
command2 word2
command2 word3

If you want all as argument of one call of command2 use that:

./command1 | xargs -t command2

That calls command2 with 3 arguments:

command2 word1 word2 word3
chaos
  • 1,565
4

You want 'command substitution', i.e: embed output of one command in anouther

command2 $(command1)

Traditionally this can also be done as:

command2 `command1`

but this usage isn't normally recommended, as you can't nest them.

For example:

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

test2.sh

#!/bin/bash
echo $2

USE:

./test2.sh $(./test.sh)
b
Barmar
  • 398
Sirex
  • 5,585
0

I guess this help you

command1 | xargs command2

PoLIVoX
  • 195