source和export區別
阿新 • • 發佈:2018-11-04
背景:當我們啟動linux後,將啟動一個使用者shell,在這個shell中,可以使用shell命令或宣告變數,也可以建立並執行shell指令碼程式,執行shell指令碼時,系統將建立一個子shell用來執行,每個shell都是由某個shell(稱為父shell)派生的
#a.sh
#! /bin/sh
echo “hello world!”
echo "PID of this script: $$"
echo "PPID of this script: $PPID"
[email protected]:~$ ./a.sh hello world! PID of this script: 23875 PPID of this script: 20654
從上面的輸出可以看到程序號不同。
假如有一個指令碼:
#test.sh
#!/bin/sh
export TEST_DIR=/home/test
直接執行./test.sh
[email protected]:~$ ./test.sh
[email protected]:~$ echo $TEST_DIR
[email protected]:~$
發現沒有值,因為子shell中並不會影響到父shell
但是假如變成這樣
[email protected]:~$ source ./test.sh
[email protected]:~$ echo $TEST_DIR
/home/test
發現可以輸出了.source(或點)命令通常用於重新執行剛修改的初始化文件,sh_profile和 .profile 等等.使它立即生效而不用去建立新的子shell。
小結:
1 export是將一個變數匯出,以給其他shell程式使用,能影響子shell
2 source 作用在本shell程式中執行,不啟動子shell,所以可以影響指令碼的父shell