1. 程式人生 > >bash xx.sh與sh xx.sh以及./xx.sh的區別

bash xx.sh與sh xx.sh以及./xx.sh的區別

在ubuntu中,sh只是bash的一個連結,執行的程式都是一樣的,命令直譯器是一樣的。但bash xx.sh和./xx.sh和sh xx.sh還是有不同的,bash xx.sh和sh xxx.sh都已經是直接執行命令,指令碼程式作為這個命令的引數,不存在可行性許可權的問題,而./xx.sh則必須具有可執行許可權,在部分自動化的指令碼中出現像./xx.sh這個的語句可能會出錯。然後,三條命令本身的語句不一樣,部分指令碼程式在執行時喜歡檢測一下命令名本身([ "$0"]),對不同的命令會作出不同的反應,這個是取決與指令碼本身的。

sh全部符合POSIX標準,而bash則有很多自己的擴充套件,不完全符合POSIX標準。非嚴格意義上說,sh可看作是bash的子集。如果你的系統上是bash,用sh script.sh 執行指令碼,實際上在工作的命令直譯器還是bash(這種情況下sh被預設設定為bash的一個連結)。但bash內部有一套模擬sh行為的實現,所以能夠以類似sh的方式(完全符合POSIX標準)來工作,假裝自己是sh。

sh命令是shell的意思,用這個命令執行腳本系統會產生一個子程序(pid 與父程序也不一樣),在這個子程序定義的變數,在指令碼執行完後,子程序結束後無法帶至父程序。
用.命令與source命令是一樣的意思,就是本程序(不產生子程序)直接去執行指令碼,如果腳本里有定義或者改變變數值,那這個變數值在程式結束後依然有效(同一個程序嘛)。