ubuntu(linux)下source、sh、bash、./執行指令碼的區別是什麼,如何執行shell程式,如何在shell程式以及後續指令碼中使用同乙個變數,這些在工作中經常用到, 我找到如下的文章,再加深複習一下。
1.source命令用法:
source filename
作用:在當前bash環境下讀取並執行filename中的命令。該filename檔案可以無」執行許可權」
注:該命令通常用命令「.」來替代。
如:source .bash_profile
. .bash_profile兩者等效。
source(或點)命令通常用於重新執行剛修改的初始化文件。
source命令(從 c shell 而來)是bash shell的內建命令。
點命令,就是個點符號,(從bourne shell而來)。
source的程式主體是bash,指令碼中的$0變數的值是bash,而且由於作用於當前bash環境,指令碼中set的變數將直接起效
2 sh, bash的命令用法:
sh/bash filename
作用:開啟乙個子shell來讀取並執行filename中命令。該filename檔案可以無」執行許可權」
注:執行乙個shell指令碼時會啟動另乙個命令直譯器.
每個shell指令碼有效地執行在父shell(parent shell)的乙個子程序裡.
這個父shell是指在乙個控制終端或在乙個xterm視窗中給你命令指示符的程序.
shell指令碼也可以啟動他自已的子程序.
這些子shell(即子程序)使指令碼並行地,有效率地地同時執行指令碼內的多個子任務.
在ubuntu中sh只是bash的乙個鏈結。
由於是在子shell中執行,指令碼設定的變數不會影響當前shell。
3、./的命令用法:
./filename
作用:開啟乙個子shell來讀取並執行filename中命令。該filename檔案需要」執行許可權」
注:執行乙個shell指令碼時會啟動另乙個命令直譯器.
每個shell指令碼有效地執行在父shell(parent shell)的乙個子程序裡.
這個父shell是指在乙個控制終端或在乙個xterm視窗中給你命令指示符的程序.
shell指令碼也可以啟動他自已的子程序.
這些子shell(即子程序)使指令碼並行地,有效率地地同時執行指令碼內的多個子任務.
由於是在子shell中執行,指令碼設定的變數不會影響當前shell。
4. export: 乙個變數建立時,它不會自動地為在它之後建立的shell程序所知。而命令export可以向後面的shell傳遞變數的值。當乙個shell指令碼呼叫並執行時,它不會自動得到原為指令碼(呼叫者)裡定義的變數的訪問權,除非這些變數已經被顯式地設定為可用。export命令可以用於傳遞乙個或多個變數的值到任何後繼指令碼
5. 舉例: 比如您在乙個指令碼裡export $kkk=111 ,假如您用./a.sh執行該指令碼,執行完畢後,您執行 echo $kkk ,發現沒有值,假如您用source來執行 ,然後再echo ,就會發現kkk=111。因為呼叫./a.sh來執行shell是在乙個子shell裡執行的,所以執行後,結構並沒有反應到父shell裡,但是 source不同他就是在本shell中執行的,所以能夠看到結果.
小測試1 建立test.sh
#!/bin/bash
export s=/home/jboss/
2執行命令: source test.sh
echo $s
結果輸出: /home/jboss/
3 新開個shell
執行命令: ./test.sh
echo $s
結果: 沒有輸出s值
結論:1、執行指令碼時是在乙個子shell環境執行的,指令碼執行完後該子shell自動退出。
2、乙個shell中的系統環境變數才會被複製到子shell中(用export定義的變數);
3、乙個shell中的系統環境變數只對該shell或者它的子shell有效,該shell結束時變數消失(並不能返回到父shell中)。3、不用 export定義的變數只對該shell有效,對子shell也是無效的。
直接執行乙個指令碼檔案是在乙個子shell中執行的,而source則是在當前shell環境中執行的。
source可以讓指令碼影響它們的父shell環境,這和export去影響子shell環境相反
Linux配置環境變數的幾種方式
環境變數相關的配置檔案 使用者環境變數配置檔案 所有使用者 ect profile etc bashrc etc environment root bashrc bash profile 非root使用者 home 非root使用者名稱 bashrc source etc profile or.et...
Linux 配置環境變數的幾種方式
使用者環境變數配置檔案 所有使用者 root 非root使用者 home 非root使用者名稱 bashrc source etc profile or.etc profile 讀取系統已有環境變數的方法 export 顯示當前系統定義的所有環境變數 echo path 輸出當前的path環境變數的...
環境變數區別
1 etc profile 此檔案為系統的每個使用者設定環境資訊,當使用者第一次登入時,該檔案被執行.並從 etc profile.d目錄的配置檔案中蒐集shell的設定。2 etc bashrc 為每乙個執行bash shell的使用者執行此檔案.當bash shell被開啟時,該檔案被讀取。3 ...