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

Linux 如何将命令输出作为多个参数传递给另一个命令,linux,bash,shell,unix,Linux,Bash,Shell,Unix,我有一个命令,可以生成如下输出: $ ./command1 word1 word2 word3 $ command2 word1 word2 word3 $ ./command1 | xargs -t command2 我想将这三个单词作为参数传递给另一个命令,如下所示: $ ./command1 word1 word2 word3 $ command2 word1 word2 word3 $ ./command1 | xargs -t command2 如何将command1输

我有一个命令,可以生成如下输出:

$ ./command1
word1 word2 word3 
$ command2 word1 word2 word3
$ ./command1 | xargs -t command2
我想将这三个单词作为参数传递给另一个命令,如下所示:

$ ./command1
word1 word2 word3 
$ command2 word1 word2 word3
$ ./command1 | xargs -t command2

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

只需使用无引号的命令替换:

$ ./command2 $(./command1)
但是,这也会使
command1
的输出服从路径名生成,因此,如果输出可能包含类似
*.txt
的内容,则在传递到
command2
之前,可能会被扩展为多个字。在这种情况下,您需要使用

$ read arg1 arg2 arg3 <<< "$(./command1)"
$ ./command2 "$arg1" "$arg2" "$arg3"

您希望能够将两个参数,
word1a word1b
word2
传递给
command2
,但是,要想获得正确的结果,需要更多关于
command1
可以输出什么的详细信息才能提供正确的解决方案。

似乎将输出与command1分开并将其发送给command2的最佳方法是使用xargs with-t选项,该选项将所有内容作为参数传递,如下所示:

$ ./command1
word1 word2 word3 
$ command2 word1 word2 word3
$ ./command1 | xargs -t command2
来源

command1以纯文本形式生成输出:主机名:端口用户名密码。command2假设再次读取三个参数,如hostname:port username password在这种情况下,我建议使用
read
的版本。我假设主机、端口和用户名都不能包含任何空格,但我不想对密码做任何假设。(如果密码以空格开头或结尾,它将失败,但无论如何,我无法从
command1
的输出中检测到这一点)。