【问题标题】:Could someone please explain this bash command?有人可以解释一下这个 bash 命令吗?
【发布时间】:2011-03-08 03:56:34
【问题描述】:

来自RVM的网站:

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

第一个小于号有什么作用? &lt;( 呢?我知道这是一个愚蠢的问题,但我很想了解这一点。

【问题讨论】:

  • 这绝对是不是一个愚蠢的问题。

标签: bash terminal


【解决方案1】:

Bash 的 process substitution&lt;( ... )&gt;( ... ) 替换为来自/到孩子的管道。因此,整个事情的意思是“从curl ... 创建一个管道,并将其用作标准输入来 bash”。

比较无意义,写得更好

curl -L https://get.rvm.io | bash

【讨论】:

  • 你说没有意义,但是我注意到使用普通管道语法时,bash 会抱怨各种语法错误和找不到命令。换句话说,command | bash 的行为似乎与 bash file-namebash &lt;(command) 不同。
  • 例如,bash &lt;(cat file-name)bash file-name 一样工作,而cat file-name | bash 则不然。诚然,这是一个人为的例子,但是 curlwget 也会发生同样的情况。我真的是 Linux 和 bash 脚本的新手,所以谁能解释造成这种差异的原因是什么?
【解决方案2】:

这称为进程替换。 curl 命令的输出通过匿名命名管道发送到bash 的标准输入。基本上,整个命令所做的是执行 curl 作为 shell 脚本检索到的内容。

我认为这很冒险,但有些人似乎可以接受。但是,如果您检索文件并在单独的步骤中运行它,您就有机会首先检查它。不管你做什么,如果你们一起做不要以root身份或sudo下运行。

【讨论】:

  • +1 感谢您的回答。将sudo 与此确实一起使用听起来像是悲剧的根源,所以我会训练自己留意这类事情!
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-02
  • 2011-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多