如何管道输出第一个命令以转到下一个命令的特定位置?

时间:2017-03-06 16:47:26

标签: bash

我正在运行一个吐出IP的命令,我需要将它提供给特定位置的另一个程序,我该怎么办?

$ command1 | command2  -c configfile -i "$1" status

" $ 1和#34;是我想要command1的结果去的地方。

感谢。

3 个答案:

答案 0 :(得分:3)

xargs是您的工具

$ command1 | xargs -I {} command2 -c configfile -i {} status

您可以多次引用该参数,例如

$ echo this | xargs -I {} echo {}, {}, and {}

this, this, and this

基于最后的评论,也许你想做这样的事情

$ var=$(command1) && command2 "$var" ... | command3 "$var" ...

答案 1 :(得分:1)

要传递command2一个文件名,在读取时会提供command1的输出,相应的工具为process substitution

command2 -c configfile -i <(command1) status

<(...)语法将替换为文件名 - 在Linux上,格式为/dev/fd/NN;在其他一些平台上使用命名管道 - 可以从中传输command2的输出。

答案 2 :(得分:0)

在bash shell中可能有100种方法可以做到这一点。这个快速而简单。我们可以使用ifconfig,grep IP地址,使用awk将其拉出并将其分配给环境变量。然后使用布尔运算符运行使用环境变量

的下一个命令
IPADDR=`ifconfig | grep 172 | awk '{print $2}' | awk -F: '{print $2}'` && echo $IPADDR