从 ruby 脚本中安装 Homebrew
Install Homebrew from within a ruby script
我创建了一个 ruby 脚本来设置一个新的 mac。
除其他外,它还创建了 .bash_profile
、.gitconfig
并配置了各种系统设置,例如显示完整的 POSIX 路径作为 Finder window 标题(超级有用).
大多数情况下,我 运行 在反引号中使用命令,例如 `defaults write com.apple.finder _FXShowPosixPathInTitle -bool true`
前面提到的完整 POSIX 路径作为 Finder window 标题技巧。
一切正常。
我想做的是让这个 ruby 脚本 运行 也包含 Homebrew 安装程序。 bash 命令是:
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然而,这在使用反引号调用时不起作用。
所以我的问题是如何从 ruby 脚本中 运行 另一个 ruby 脚本(Homebrew 安装程序)?
更具体地说,我将如何从 ruby 脚本中启动基于 Web 的交互式 Homebrew 安装程序(好吧,你必须至少按一次 return
),并将其输出显示在航站楼?
我知道我可以将其全部重写为 bash
脚本,但我真的宁愿将其全部保留在 ruby.
中
让我们来分解一下$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
实际做了什么:
- 通过 curl 下载自制程序安装 ruby 文件。由于命令被
$()
包围,它执行命令并将输出传递给 ruby.
- 通过Ruby执行脚本。
-e
标志指示 Ruby 从命令行执行脚本而不是加载指定文件。
因为我们知道这是一个 ruby 脚本,所以我们可以执行以下操作:
- 使用
Net::HTTP
或其他一些 ruby 库,下载自制程序安装文件。
eval()
或以其他方式执行自制 ruby 脚本。
当然,eval()
是危险的,尤其是对于不受信任的输入,但您基本上已经 运行 使用提供的安装命令对脚本进行评估。
脚本形式为:
require 'net/http'
homebrew_uri = URI('https://raw.githubusercontent.com/Homebrew/install/master/install')
homebrew_script = Net::HTTP.get(homebrew_uri)
eval(homebrew_script)
我创建了一个 ruby 脚本来设置一个新的 mac。
除其他外,它还创建了 .bash_profile
、.gitconfig
并配置了各种系统设置,例如显示完整的 POSIX 路径作为 Finder window 标题(超级有用).
大多数情况下,我 运行 在反引号中使用命令,例如 `defaults write com.apple.finder _FXShowPosixPathInTitle -bool true`
前面提到的完整 POSIX 路径作为 Finder window 标题技巧。
一切正常。
我想做的是让这个 ruby 脚本 运行 也包含 Homebrew 安装程序。 bash 命令是:
$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
然而,这在使用反引号调用时不起作用。
所以我的问题是如何从 ruby 脚本中 运行 另一个 ruby 脚本(Homebrew 安装程序)?
更具体地说,我将如何从 ruby 脚本中启动基于 Web 的交互式 Homebrew 安装程序(好吧,你必须至少按一次 return
),并将其输出显示在航站楼?
我知道我可以将其全部重写为 bash
脚本,但我真的宁愿将其全部保留在 ruby.
让我们来分解一下$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"
实际做了什么:
- 通过 curl 下载自制程序安装 ruby 文件。由于命令被
$()
包围,它执行命令并将输出传递给 ruby. - 通过Ruby执行脚本。
-e
标志指示 Ruby 从命令行执行脚本而不是加载指定文件。
因为我们知道这是一个 ruby 脚本,所以我们可以执行以下操作:
- 使用
Net::HTTP
或其他一些 ruby 库,下载自制程序安装文件。 eval()
或以其他方式执行自制 ruby 脚本。
当然,eval()
是危险的,尤其是对于不受信任的输入,但您基本上已经 运行 使用提供的安装命令对脚本进行评估。
脚本形式为:
require 'net/http'
homebrew_uri = URI('https://raw.githubusercontent.com/Homebrew/install/master/install')
homebrew_script = Net::HTTP.get(homebrew_uri)
eval(homebrew_script)