1. 程式人生 > >shell指令碼的執行和source

shell指令碼的執行和source

 shell命令可以事先寫入一個檔案中,使用時shell讀取檔案中的命令逐條解釋執行,這種檔案,被稱為指令碼。

 執行指令碼的方法與執行其他程式一樣,如:

  ./setenv.sh  #setenv.sh是當前目錄下的一個指令碼

 以這種方法執行指令碼時,其中的命令是在一個子shell中執行的。子shell繼承了父shell的環境變數,但無法修改他們,或者說所做的修改僅對子shell有效。

 如果要使用指令碼來修改環境變數,則必須讓指令碼在當前shell中執行,這一點可以用以下命令實現:

 source setenv.sh #讀入setenv.sh檔案中的命令,在當前shell中執行。

  source 是內建命令,用途是讀取檔案中的內容,並在當前shell中逐條執行。這種方式執行的指令碼無須執行許可權。source命令可以縮寫為一個小數點,如

  source setenv.sh 等價於 . setenv.sh

以下是一個例子:

在shell中設定TARGET變數

TARGET=arm-linux

然後新建了一個指令碼檔案test.sh,裡面echo ${TARGET}

1.  執行 ./test.sh #無任何輸出,因為test.sh在子shell中執行,如果不加export,就不會在子shell中看到這個變數,因為它還不是一個系統環境變數

2. 執行source test.sh #輸出arm-linux,因為test.sh在當前shell中執行

3. export TARGET

    ./test.sh #輸出arm-linux,因為export了TARGET的值



所以得出的結論是:1、執行指令碼時是在一個子shell環境執行的,指令碼執行完後該子shell自動退出;2、一個shell中的系統環境變數才會被複制到子shell中(用export定義的變數);3、一個shell中的系統環境變數只對該shell或者它的子shell有效,該shell結束時變數消失(並不能返回到父shell中)。3、不用export定義的變數只對該shell有效,對子shell也是無效的。