前言
這篇是小知識篇,
我們在執行一個 bash 腳本的時候,可能會有幾種執行方法,
但其實有很大的差別,
以下我們進行比較。
比較
我們要比較的執行方式有
- ./script.sh
- bash ./script.sh
- source ./script.sh
./script.sh
直接執行腳本,使用的 shell 可以透過 “which $SHELL” 查詢
例如我在 mac 上,查詢的結果會是 /bin/zsh
因此這行 「./script.sh」,實際上等價於 「zsh ./script.sh」
bash ./script.sh
直接指定用 bash 執行 script.sh,
這裡有一個重點「我們在執行這指令後,其實是另外開一個 shell 去執行這個指令」
- 簡單來說,這會有什麼差別呢?
如果我們在此 script 有定義一些環境變數,
他會被執行在「暫時為了執行 script 而產生的 shell」,
所有執行過程中產生的「變數定義不會被保存」。
如果我們要做一些事情,同時「不希望暫時產生的變數不會修改到原本的 shell」,
應該要使用 bash 或 直接執行。
source ./script.sh
與 bash 的最大差別是在,
我們是「對當前的 shell」去執行腳本,
因此「變數定義都會被保存」。
因此如果我們要做一些「環境變數的定義」,
應該要使用 source。