bash< <(curl -s https://rvm.io/install/rvm):它做了什么?

时间:2012-01-24 21:20:06

标签: ruby-on-rails bash curl

  

可能重复:
  What does it mean “bash < <( curl rvm.io/releases/rvm-install-head )”

我正在努力在Mac OS X上安装Ruby on Rails,并且遇到了几个调用此行的教程:

bash < <(curl -s https://rvm.io/install/rvm)

我不知道bash < <位是什么。

这条线做什么?

由于

4 个答案:

答案 0 :(得分:6)

第一个<将右侧的文件重定向到左侧命令的stdin

<(...)语法运行指定的命令,将其输出保存到命名管道(一种特殊类型的文件,输出写入其中的内容而不将其保存到磁盘)并替换整个{{1} }与文件的名称。这称为进程替换(您可以在<(...)中查找),只要需要文件但您想使用命令的输出,就会使用它。

对于man bash,它是一个命令,用于下载作为参数提供给它的URL,并将其输出到屏幕(curl)。

总结,您提供的命令是:

  1. 运行bash,将其作为输入提供临时命名管道的内容。
  2. 下载网址stdout,这是一个bash脚本,并将其保存到作为bash输入的临时命名管道。
  3. 这有效地使用bash在URL处运行脚本。

答案 1 :(得分:3)

<(command)语法用于执行进程替换。在此处阅读更多相关信息:http://tldp.org/LDP/abs/html/process-sub.html

当您希望将一个命令的输出作为文件参数提供给另一个命令时,它非常有用。 <(command)语法使输出的行为就像它是一个文件一样。

例如,我们知道perl需要一个perl程序作为其参数。

现在,如果perl程序驻留在一个URL http://pastebin.com/raw.php?i=wdtZYvvr中,我们知道curl http://pastebin.com/raw.php?i=wdtZYvvr的输出将是该URL中的程序。因此,我们可以将此命令的输出作为参数提供给perl,如下所示:

perl <(curl http://pastebin.com/raw.php?i=wdtZYvvr)

当我想从两个命令而不是两个文件中获取输出的差异时,我经常发现进程替换非常有用。但是diff需要两个文件参数。因此,我们将两个输出作为文件提供给使用进程替换的差异。

答案 2 :(得分:0)

bash < <位本质上是一条指令,用于将curl命令的输出解释为命令行指令 - 而curl基本上只是查找网页。如果您打开https://rvm.io/install/rvm,您将看到将指示bash运行的脚本。

答案 3 :(得分:0)

许多shell(包括bash)使用<重定向输入。 foo&lt; <(bar)表示foo将读取bar的输出作为输入。