我有一个产生输出这样的命令:如何命令的输出作为几个参数传递给另一个命令
$ ./command1
word1 word2 word3
我想这三个字作为参数传递给另一个这样的命令:
$ command2 word1 word2 word3
如何将command1输出作为三个不同参数$ 1 $ 2 $ 3传递给command2?
我有一个产生输出这样的命令:如何命令的输出作为几个参数传递给另一个命令
$ ./command1
word1 word2 word3
我想这三个字作为参数传递给另一个这样的命令:
$ command2 word1 word2 word3
如何将command1输出作为三个不同参数$ 1 $ 2 $ 3传递给command2?
似乎分开命令1的输出,并将其发送到command2的三个不同的参数最好的方法是使用带有-t选项xargs的这是通过所有作为参数是这样的:
$ ./command1 | xargs -t command2
只需使用不带引号的命令替换:
$ ./command2 $(./command1)
然而,这也科目command1
的输出路径名的产生,因此,如果输出可能包括像*.txt
,你的风险是正扩展到多个单词之前被传递到command2
。在这种情况下,你需要使用
$ read arg1 arg2 arg3 <<< "$(./command1)"
$ ./command2 "$arg1" "$arg2" "$arg3"
或
$ read -a args <<< "$(./command1)"
$ ./command2 "${args[@]}"
到输出分割成3个字,而不对它们进行路径名的产生。
这将不起作用如果command1
输出看起来像
"word1a word1b" word2
,你希望能够到两个参数,word1a word1b
和word2
传递给command2
,但获得这种权利是充分棘手要求更多关于什么command1
可以输出以提供正确的解决方案的细节。
command1以纯文本格式输出输出:hostname:port username password。 command2假设再次读取三个参数,如主机名:端口用户名密码 – Addy 2014-11-04 18:52:09
在这种情况下,我会推荐使用'read'的版本。我假设主机,端口和用户名都不能包含任何空格,但我会毫不犹豫地对密码做任何假设。 (如果密码开始或以空白结束,它会失败,但我没有办法从'command1'的输出中检测到这一点)。 – chepner 2014-11-04 19:12:14