2014-11-04 73 views

回答

0

似乎分开命令1的输出,并将其发送到command2的三个不同的参数最好的方法是使用带有-t选项xargs的这是通过所有作为参数是这样的:

$ ./command1 | xargs -t command2 

来源
https://serverfault.com/users/249134/chaosc

1

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

$ ./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 word1bword2传递给command2,但获得这种权利是充分棘手要求更多关于什么command1可以输出以提供正确的解决方案的细节。

+0

command1以纯文本格式输出输出:hostname:port username password。 command2假设再次读取三个参数,如主机名:端口用户名密码 – Addy 2014-11-04 18:52:09

+0

在这种情况下,我会推荐使用'read'的版本。我假设主机,端口和用户名都不能包含任何空格,但我会毫不犹豫地对密码做任何假设。 (如果密码开始或以空白结束,它会失败,但我没有办法从'command1'的输出中检测到这一点)。 – chepner 2014-11-04 19:12:14

相关问题