回覆列表
-
1 # 產品經理老胡
-
2 # 可樂土豆
source 以及 . 直接在當前的程序中讀取指令碼的配置,不會開一個新的程序!
source會將指令碼的內容直接影響到父程序的(因為它不開闢新執行緒,可以說是直接在當前程序中加入指令碼的執行內容)。所以你source之後,裡面配置的變數都會加入到當前環境中,你可以在該shell中呼叫指令碼中的變數!
而./xx.sh 以及 sh
xx.sh
是在當前程序下新開一個子shell程序執行這個指令碼,當指令碼執行完畢了,sh中設定的變數和子程序一起被銷燬了!(該子shell繼承了父程序的shell的環境變數,子shell結束了變數將被銷燬,如果使用了export可以將子shell的變數反饋到父級別的shell中)
老胡的看法:
有區別!使用source和./執行指令碼不但有區別,區別還挺大。老胡平時使用linux的bash比較多,單就bash的情況說說吧。使用source命令執行指令碼的時候,是在當前的shell程序中執行的,可以使用和修改當前shell的所有變數;使用./執行指令碼的時候,是另外建立了一個新的shell程序,指令碼在這個新的程序中執行。
瞭解一下source和./1、source和.(注意不是./)
source是bash的一個內建命令(zsh也有這個命令),它的用法是:
source 檔名source的作用是在當前shell環境中從指令碼檔案中讀取並執行命令,返回執行的最後一個命令的退出狀態 。指令碼檔案不需要具備可執行許可權。
.命令和source命令等價,是source的別名。
2、./的含義
./其實並不是命令,它就是它本身的含義:當前目錄。
以./script這樣的方式執行指令碼的時候,./的作用實際上就是指定了指令碼檔案所在的目錄。
./script
bash ./script
sh ./script
如果指令碼是bash指令碼(指令碼開頭的sha-bang指定的是/bin/bash作為shell直譯器),則它們三個是等價的。
當“./”代表的目錄存在於$PATH之中時,則可以省略直接執行script。
使用bash和sh執行指令碼的時候不需要指令碼具有可執行許可權,以命令方式執行指令碼檔案的時候需要可執行許可權。
例項演示source和./執行指令碼的區別下面用兩個例項來演示一下source和./執行指令碼的區別
我先在shell裡定義一個變數(不匯出環境變數),然後分別用source和./執行的方式執行讀取和修改這個變數的指令碼。
指令碼script的內容:
./執行的結果:
source執行的結果:
總結一下,source是在當前shell環境下逐條執行指令碼中的語句,會對當前shell環境產生影響;./直接執行是根據指令碼中#!指定的shell來執行接下來的每條命令;bash和sh是使用bash shell逐條執行指令碼中的命令。它們都是在子shell中執行,不會對當前shell環境產生影響。