Shell 一鍵安裝命令
阿新 • • 發佈:2018-12-21
現在是懶人的天下,為了迎合使用者的需求,很多開源軟體或者包提供的安裝步驟都非常簡單,大家應該看到不少類似一鍵安裝的命令。下面是幾個典型的例子:
# 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
的用法,我在 終端下肉眼看不見的東西 曾經提到過。
不過,建議執行類似一鍵安裝的命令之前,一定要先大致看下安裝指令碼,避免裡面有不安全的程式碼。