使用linux不免要用到執行腳本,比如一個文件a.sh,我們有時會見到用. a.sh
去執行,有時見到用sh a.sh
去執行,或者bash a.sh
,或者source a.sh
,那麼這兩種執行腳本的方式有什麼區別呢?這個問題也困惑了本人很久,今天總結一下:
首先考慮這樣子一種情況:
我的作用文件有時候路徑比較長,爲什麼不創建一個腳本放在初始路徑下,這樣運行一下直接到到位,於是有了下面的welcome.sh
,內容爲:
#!/bin/bash
echo "cd /opt/jskp/jinjiwei"
cd /opt/jskp/jinjiwei
其中#! 是一個約定的標記,它告訴系統這個腳本需要什麼解釋器來執行,即使用哪一種 Shell。 echo 命令用於向窗口輸出文本。
保存到根目錄下,執行
1、. welcome.sh
方法執行:
如圖可見,兩條語句都被執行,第一條執行輸出第二條命令,第二條命令執行進入對應目錄。
2、source welcome.sh
方法執行:
3、bash welcome.sh
方法執行:
4、sh welcome.sh
方法執行:
可以看出,.或source
對於腳本中的語句可以全部執行,但是sh或bash
只能執行第一條語句,而且不管有沒有解釋器信息結果都是一樣的哦,很奇怪的現象,現象解釋:
這樣執行的話終端會產生一個子shell(類似於C語言調用函數),子shell去執行我的腳本,在子shell中已經切換了目錄了,但是子shell一旦執行完,馬上退出,子shell中的變量和操作全部都收回。回到終端根本就看不到這個過程的變化。引用文檔
這種情況下可以使用.或source
方法解決哦,因爲.或source
與加載資源類似,把腳本當作程序加載運行。
所以推薦使用. a.sh
,source a.sh
執行腳本哦。