2015-02-08 111 views
1

我創建了一個設置新的mac的ruby腳本。從紅寶石腳本中安裝Homebrew

其中,它創建了一個.bash_profile,.gitconfig並配置了各種系統設置,如將完整的POSIX路徑顯示爲Finder窗口標題(超級有用)。

大多數情況下,我使用反引號(如`defaults write com.apple.finder _FXShowPosixPathInTitle -bool true`)作爲Finder窗口標題技巧運行上述完整的POSIX路徑。

這一切都很好。

我想要做的就是讓這個ruby腳本運行Homebrew安裝程序。 bash命令爲:

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

但是,使用反引號調用時這不起作用。

所以我的問題是如何從ruby腳本中運行另一個ruby腳本(這是Homebrew安裝程序)?

更具體地說,我將如何從基於Web的交互式自制軟件安裝程序(以及您必須至少按return至少一次)從ruby腳本中啓動,並將其輸出顯示在終端中?

我知道我可以將這一切全部改寫爲bash腳本,但我寧願將它們全部保留在紅寶石中。

回答

2

讓我們分解什麼$ ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"實際上做:

  1. 下載,通過捲曲,在安裝自制軟件ruby文件。由於命令被$()包圍,它會執行命令並將輸出傳遞給ruby。
  2. 通過Ruby執行腳本。 -e標誌指示Ruby從命令行執行腳本,而不是加載指定的文件。

因爲我們知道,這是一個Ruby腳本,我們只要做到以下幾點:

  1. 使用Net::HTTP或其他一些Ruby庫,下載後,安裝自制軟件文件。
  2. eval()或以其他方式執行自制ruby腳本。

當然,eval()是危險的,特別是對於不受信任的輸入,但是您已經基本上使用提供的install命令在腳本上運行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) 
+0

或者更短:'需要 「開放-URI」; eval open(「http:// ...」,&:read)'。 – britishtea 2015-02-09 00:51:40