“ <<(...)”重定向是什么意思?


32

我已经看到使用以下命令安装了rvm(红宝石版本管理器):

bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer )

因此,据我了解,我们获得了脚本内容并将其传递给bash(我相信< <并且<<是同一回事?),我对该< <部分感兴趣,可以在网上找到以下说明:

<< 令牌意味着将当前输入流用作程序的STDIN,直到看到令牌为止。

这对我来说还不清楚,有人可以用更简单的方式举例或说明吗?

Answers:


40

没有,< <<<不一样的东西。

第一个由公共<重定向字符和<(command)语法的第一个字符组成。这是一个ksh结构(也可以在bash和中找到zsh),称为过程替换,该结构接受输出command并将其提供到文件中,该文件的名称指向command正在写入的管道的另一端。

换句话说,您可以将< <(command)as视为< file其中file包含的输出command


5
几天前,我了解了此命令,这是一个非常有用的命令。您可以执行的操作仅受您的想象力限制:例如,此命令为您提供了仅隐藏文件的列表:diff <(ls) <(ls -a)
Khaja Minhajuddin 2011年

1
这种语法确实确实很有用,但是在Stonerain的特定情况下,与简单管道相比,它似乎没有提供任何附加值。
jlliagre

1
在上面的语法中没有帮助。但是,如果你改变它咯,这是好多了:bash <(curl ...)不是bash < <(curl ...)不偷STDIN,所以你可以自由地回答提示和脚本提供输入。
tylerl 2011年

使用<()似乎是直接将多个$ variables直接发送到命令的绝佳选择,而不必先将$ variables不必要地写入文件。DIFF <(回声“$文本1”)<(回声“$ text2”中) stackoverflow.com/questions/13437104/...
Sepero

18

这是一种简化操作的复杂方法:

curl -s https://raw.github.com/... | bash
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.