bash中的构造调用了什么,你可以在其中包装一个输出到stdout的命令,这样输出本身被视为一个流?如果我没有那么好地描述,也许一个例子会做得最好,这就是我通常使用的:将diff应用于 not 来自文件的输出,但是来自其他
命令cmd
包装为
<(cmd)
通过以这种方式包装命令,在下面的示例中,我确定我正在运行的两个命令之间存在一个差异,然后我能够确定一个精确的差异。将命令包装为&lt;(cmd)调用的构造/技术是什么?感谢
[builder@george v6.5 html]$ git status | egrep modified | awk '{print $3}' | wc -l
51
[builder@george v6.5 html]$ git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define' | wc -l
50
[builder@george v6.5 html]$ diff <(git status | egrep modified | awk '{print $3}') <(git status | egrep modified | awk '{print $3}' | xargs grep -l 'Ext\.define')
39d38
< javascript/reports/report_initiator.js
附录 修改后的命令使用git的ls文件的建议应该如下(未经测试):
diff <(git ls-files -m) <(git ls-files -m | xargs grep -l 'Ext\.define')
答案 0 :(得分:6)
答案 1 :(得分:6)
它被称为process substitution。
答案 2 :(得分:1)
正如您所知,这是流程替换。我只想指出这也适用于另一个方向。使用&gt;(cmd)进行的进程替换允许您获取写入文件的命令,而是将该输出重定向到另一个命令的标准输入。它将某些内容插入到以输出文件名作为参数的管道中非常有用。你几乎没有看到它,因为几乎每个标准命令都会写入stdout,但我经常使用自定义的东西。这是一个人为的例子:
$ echo "hello world" | tee >(wc)
hello world
1 2 12