1. 程式人生 > >Linux中source filename .(點)filename ./filename sh filename的區別

Linux中source filename .(點)filename ./filename sh filename的區別

在shell中source filename 和 . filename是一樣的,但source和 ./filename.sh的執行結果有很大區別,借用一張網上的圖。如下
這裡寫圖片描述
可以看到通過./filename.sh執行shell指令碼,指令碼內執行的命令和設定的環境變數不影響執行shell指令碼的shell環境變數,而使用source filename則會影響到執行source filename的shell的環境變數。
以下是三種執行檔案的方法比較

  1. source命令用法:
    source filename
    作用:

    在當前bash環境下讀取並執行filename中的命令。該filename檔案可以無執行許可權”

    注:該命令通常用命令“.”來替代。

    如:source .bash_profile 和 . .bash_profile兩者等效。
    source(或點)命令通常用於重新執行剛修改的初始化文件。
    source命令(從 C Shell 而來)是bash shell的內建命令。
    點命令,就是個點符號,(從Bourne Shell而來)。

  2. sh和bash命令用法:
    sh filename bash filename
    作用:

    開啟新的子shell,讀取並執行filename中的命令。該filename檔案可以無“執行許可權”

    注:兩者在執行檔案時的不同,是分別用自己的shell來跑檔案。

    sh使用“-n”選項進行shell指令碼的語法檢查,使用“-x”選項實現
    shell指令碼逐條語句的跟蹤,可以巧妙地利用shell的內建變數增強
    “-x”選項的輸出資訊等。

  3. ./的命令用法:
    ./filename
    作用:

    開啟一個子shell來讀取並執行FileName中命令。

    注:執行一個shell指令碼時會啟動另一個命令直譯器.