这是什么意思“bash<<(curl http://rvm.io/releases/rvm-install-head)”

时间:2010-11-04 13:08:11

标签: bash shell

RVM主页

http://rvm.io/

建议人们使用

安装RVM
bash < <( curl http://rvm.io/releases/rvm-install-head )

这是什么语法? command <( another_command)

原来的线不能吗? curl http://rvm.io/releases/rvm-install-head | bash

2 个答案:

答案 0 :(得分:14)

<(command)使用命令的输出(或使用现有的/dev/fd文件)创建命名管道,并将该管道的文件名替换为命令。 <然后重定向来自该给定文件的标准输入。

所以是的,在这种情况下,这相当于

curl http://rvm.io/releases/rvm-install-head | bash

我不确定为什么他们会建议更复杂,更便携的版本。在某些情况下,您希望使用< <()的版本使用管道版本,因为管道为接收输入的命令创建子shell(在本例中为bash),而{{1为生成输出的命令创建一个子shell。如果使用管道,则子shell中的命令不能修改sh​​ell环境中的变量,这有时是需要的(如果要将某些内容传递给< <()命令)。但是,在这种情况下,命令的输出只是直接传递给while read ...的显式调用;这里没有任何东西需要从父shell运行。

答案 1 :(得分:4)

请参阅part 23 of the advanced bash scripting guide

简而言之,<( x )>( y )语法的效果如下:

  • 您将它们放在命令行中,其中包含文件名

  • 封闭的命令将

    • 将stdout重定向到(<(x))或
    • 从(>(y)
    • 读取标准输入

    临时文件(或命名管道,bash将对其进行管理),其名称将提供给您的外部命令。