1. 程式人生 > >Shell 一鍵安裝命令

Shell 一鍵安裝命令

現在是懶人的天下,為了迎合使用者的需求,很多開源軟體或者包提供的安裝步驟都非常簡單,大家應該看到不少類似一鍵安裝的命令。下面是幾個典型的例子:

# homebrew 安裝
$ ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

# nvm 安裝, 兩種方法
$ curl https://raw.githubusercontent.com/creationix/nvm/v0.8.0/install.sh | sh
$ wget -qO- https://raw.githubusercontent.com/creationix/nvm/v0.8.0/install.sh | sh

# rvm 安裝
$ \curl -sSL https://get.rvm.io | bash -s stable

簡單粗暴,CMD + C 再加 CMD + V,隨手一個 Enter,就搞定了。

那麼這上面的原理是什麼樣子的呢?其實很簡單。

 

首先通過 curl 或者 wget 將安裝指令碼下載下來,將內容輸出到標準輸出。這一步對應上面的 curl -ssL 或者 wget -qO-,一定要注意將錯誤或者異常輸出過濾掉,保證標準輸出的內容就是指令碼的內容。

然後通過管道傳遞給 shell,shell 在沒有指定指令碼檔案的時候,支援從標準輸入讀取指令碼內容並解釋執行。這樣將"下載 - 儲存 - 安裝"這幾步操作合到一個命令中完成。

對於 rvm 的安裝又有點特殊,安裝指令碼需要指定執行引數,bash -s stable 中 -s 之後的部分就是透傳給安裝指令碼的引數,翻譯下可以理解的形式是:

$ \curl -sSL https://get.rvm.io > /tmp/rvm_install.sh
$ bash /tmp/rvm_install.sh stable
$ rm -f /tmp/rvm_install.sh

PS: \curl 的用法,我在 終端下肉眼看不見的東西 曾經提到過。

不過,建議執行類似一鍵安裝的命令之前,一定要先大致看下安裝指令碼,避免裡面有不安全的程式碼。