ruby -e“ $(curl url)”`是什么意思?

时间:2018-06-25 07:22:27

标签: ruby

Homebrew中的这一行是什么意思?

/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"

我知道-e将在命令中包含ruby代码,但是我没有得到$()部分。美元符号支架在这里做什么?

非常重要的是,在哪里可以找到有关此文档的信息?

2 个答案:

答案 0 :(得分:10)

$(...)是Bash command substitution。它在命令执行之前发生;它在括号内执行命令并替换其输出。例如,

echo "There are $(ls | wc -l) files in this directory"

将首先执行ls | wc -l,它会输出例如17;然后echo "There are 17 files in this directory"

curl是一个命令行实用程序,默认情况下,它通过URL提取内容并输出该内容。因此,/usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)将首先下载https://raw.githubusercontent.com/Homebrew/install/master/install的内容,然后将其替换为命令行中的-e选项的参数。然后,Ruby将其作为Ruby代码执行。

答案 1 :(得分:-1)

您的问题与Ruby无关;这是一个 shell 问题。假设运行此命令的shell是bash或ksh或Zsh,则这些shell将以该命令的标准输出替换格式为$(COMMAND)的表达式。因此,根据您的情况,curl命令的标准输出将作为Ruby代码执行。