我有一个产生如下输出的命令:
$ ./command1
word1 word2 word3
我想将这三个单词作为参数传递给另一个命令:
$ command2 word1 word2 word3
如何将command1输出作为三个不同的参数$ 1 $ 2 $ 3传递给command2?
答案 0 :(得分: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 word1b
和word2
两个参数传递给command2
,但要正确这一点是非常棘手的,需要有关command1
的详细信息可以输出以提供正确的解决方案。
答案 1 :(得分:0)
似乎是将输出与command1分开并将其发送到command2的最佳方法,因为三个不同的参数是使用带有-t选项的xargs,它将all作为参数传递,如下所示:
$ ./command1 | xargs -t command2