如何将命令输出作为多个参数传递给另一个命令


13

我有一个产生如下输出的命令:

$。/ command1
word1 word2 word3

我想将这三个词作为参数传递给这样的另一个命令:

$ command2 word1 word2 word3

如何将command1输出作为三个不同的参数$ 1 $ 2 $ 3传递给command2?

Answers:


9

您可以使用xargs,该-t标志xargs将是冗长的,并打印它执行的命令:

./command1 | xargs -t -n1 command2

-n1定义传递给的每个调用的最大参数command2。这将执行:

command2 word1
command2 word2
command2 word3

如果您想将所有参数用作一次调用的参数command2,则:

./command1 | xargs -t command2

调用带有2个参数的command2:

command2 word1 word2 word3

如果command1的输出长于该ARG_MAX怎么办?我遇到了将文件内容传递给函数的情况。
0xc0de

4

您需要“命令替换”,即:将一个命令的输出嵌入到外部

command2 $(command1)

传统上,这也可以通过以下方式完成:

command2 `command1`

但是通常不建议使用这种用法,因为您不能嵌套它们。

例如:

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

test2.sh

#!/bin/bash
echo $2

采用:

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

如果这样做,它将作为单个参数传递command1输出,而不是像三个不同的参数一样传递:$ command2 $(cat output_from_command1)
Addy 2014年

啊,对了,一秒钟……放在那里的那只猫并不需要。
Sirex 2014年

为我工作。如果我的command2回显$ 2(即第二个参数),我将得到“ word2”。
Sirex 2014年

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.