【发布时间】:2011-03-08 03:56:34
【问题描述】:
来自RVM的网站:
bash < <( curl https://rvm.io/releases/rvm-install-head )
第一个小于号有什么作用? <( 呢?我知道这是一个愚蠢的问题,但我很想了解这一点。
【问题讨论】:
-
这绝对是不是一个愚蠢的问题。
来自RVM的网站:
bash < <( curl https://rvm.io/releases/rvm-install-head )
第一个小于号有什么作用? <( 呢?我知道这是一个愚蠢的问题,但我很想了解这一点。
【问题讨论】:
Bash 的 process substitution 将 <( ... ) 和 >( ... ) 替换为来自/到孩子的管道。因此,整个事情的意思是“从curl ... 创建一个管道,并将其用作标准输入来 bash”。
比较无意义,写得更好
curl -L https://get.rvm.io | bash
【讨论】:
command | bash 的行为似乎与 bash file-name 或 bash <(command) 不同。
bash <(cat file-name) 与bash file-name 一样工作,而cat file-name | bash 则不然。诚然,这是一个人为的例子,但是 curl 或 wget 也会发生同样的情况。我真的是 Linux 和 bash 脚本的新手,所以谁能解释造成这种差异的原因是什么?
这称为进程替换。 curl 命令的输出通过匿名命名管道发送到bash 的标准输入。基本上,整个命令所做的是执行 curl 作为 shell 脚本检索到的内容。
我认为这很冒险,但有些人似乎可以接受。但是,如果您检索文件并在单独的步骤中运行它,您就有机会首先检查它。不管你做什么,如果你们一起做不要以root身份或sudo下运行。
【讨论】:
sudo 与此确实一起使用听起来像是悲剧的根源,所以我会训练自己留意这类事情!