从ruby脚本中安装Homebrew

时间:2015-02-08 21:43:53

标签: ruby bash homebrew

我创建了一个设置新mac的ruby脚本。

除此之外,它还会创建.bash_profile.gitconfig并配置各种系统设置,例如将完整的POSIX路径显示为Finder窗口标题(超级有用)。

主要是我在反引号中运行命令,例如`defaults write com.apple.finder _FXShowPosixPathInTitle -bool true`前面提到的完整POSIX路径作为Finder窗口标题技巧。

这一切都很好。

我想要做的是让这个ruby脚本运行Homebrew安装程序。 bash命令是:

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

然而,使用反引号调用时这并不起作用。

所以我的问题是如何在ruby脚本中运行另一个ruby脚本(Homebrew安装程序)?

更具体地说,我将如何启动基于Web的交互式Homebrew安装程序(您必须至少按一次return)来自ruby脚本并将其输出显示在终端中?

我知道我可以将此全部重写为bash脚本,但我真的宁愿将其全部保留在ruby中。

1 个答案:

答案 0 :(得分:2)

让我们分解$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"实际做的事情:

  1. 通过curl下载自制软件安装ruby文件。由于命令被$()包围,因此它执行命令并将输出传递给ruby。
  2. 通过Ruby执行脚本。 -e标志指示Ruby从命令行执行脚本,而不是加载指定的文件。
  3. 由于我们知道它是一个ruby脚本,我们可以执行以下操作:

    1. 使用Net::HTTP或其他一些ruby库,下载自制软件安装文件。
    2. eval()或以其他方式执行自制的ruby脚本。
    3. 当然,eval()是危险的,特别是对于不受信任的输入,但是您已经基本上使用提供的安装命令在脚本上运行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)