可能重复:
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 < <
位是什么。
这条线做什么?
由于
答案 0 :(得分:6)
第一个<
将右侧的文件重定向到左侧命令的stdin
。
<(...)
语法运行指定的命令,将其输出保存到命名管道(一种特殊类型的文件,输出写入其中的内容而不将其保存到磁盘)并替换整个{{1} }与文件的名称。这称为进程替换(您可以在<(...)
中查找),只要需要文件但您想使用命令的输出,就会使用它。
对于man bash
,它是一个命令,用于下载作为参数提供给它的URL,并将其输出到屏幕(curl
)。
总结,您提供的命令是:
stdout
,这是一个bash脚本,并将其保存到作为bash输入的临时命名管道。这有效地使用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的输出作为输入。