我正在尝试安装RVM。这里有一个神奇的命令行:
bash < <(curl -s https://rvm.io/install/rvm)
我知道bash和curl是什么。我知道第一个<
是I/O重定向符号。但是<()
语法是什么意思呢?
这个命令和下面的命令有什么区别?
bash < `curl -s https://rvm.io/install/rvm`
?(后一条命令无法运行)
我正在尝试安装RVM。这里有一个神奇的命令行:
bash < <(curl -s https://rvm.io/install/rvm)
我知道bash和curl是什么。我知道第一个<
是I/O重定向符号。但是<()
语法是什么意思呢?
这个命令和下面的命令有什么区别?
bash < `curl -s https://rvm.io/install/rvm`
?(后一条命令无法运行)
<()
时,99% 的情况下是为了同时比较两个不同命令的输出。例如,
diff <( some_command ) <( some_other_command )
process < file
`curl -s https://rvm.io/install/rvm`
会被扩展为类似于#!/usr/bin/env bash的内容...
如果这样,shell会感到困惑,因为它会看到
bash < #...
与其使用文件名,<()
操作符会创建一个新的进程在 (..) 中运行命令。它将创建一个新的文件或管道来捕获结果。箭头指向左边 <()
而不是 >()
,这意味着内部进程的输出将被写入文件,可以被进程读取。
在您的情况下,bash < <(...)
就像 bash < /dev/fd/100
一样。
如果您确实想知道发生了什么,请运行
echo <(curl -s https://rvm.io/install/rvm)
cat < somefile
来理解和cat < <(echo test)
。它可能会显示X 文件不存在
。 - Lynch