利用shell指令碼新增環境變數

2021-09-08 07:50:58 字數 1232 閱讀 6769

在shell指令碼設定了環境變數,如export library_path=./lib/,執行了此指令碼後, 在執行生成的可執行檔案,提示錯誤

error while loading shared libraries: libww.so: cannot open shared object file: no such file or directory

但是如果把export那句話單獨在命令列執行,在gcc編譯**後不會出現問題

怎麼也想不通,為什麼指令碼執行了,設定了環境變數,但是執行可執行檔案總是失敗。

檢視大牛部落格,終於發現

原因是執行指令碼用./test.sh的方式,如果採用sourcetest.sh,則環境變數會生效。

./***.sh的時候,指令碼裡面列印path是改了,但是在終端echo $path卻沒有看到變化,因為這樣執行等於說不在當前程序

那麼。這是為什麼呢?

關鍵:直接執行乙個指令碼檔案是在乙個子shell中執行的,而source則是在當前shell環境中執行的。

1、執行指令碼時是在乙個子shell環境執行的,指令碼執行完後該子shell自動退出;

2、乙個shell中的系統環境變數才會被複製到子shell中(用export定義的變數)

3、乙個shell中的系統環境變數只對該shell或者它的子shell有效,該shell結束時變數消失(並不能返回到父shell中)。

4、不用export定義的變數只對該shell有效,對子shell也是無效的。

另:---- 在unix系統中,我們在執行shell程式或系統命令的過程如下:  

---- 假設在當前的shell環境下,我們執行ps -f命令.  

---- 首先,當前的shell會呼叫:fork()命令,產生乙個subprocess,該子程序完全複製了父程序的所有環境;  

---- 之後,當前的shell會呼叫:exec ps -f命令,在新的子程序的環境中,執行ps -f 命令.子程序的環境變數會根據新的應用進行調整,並使之執行,當應用完成之後,子程序結束,返回到父程序.  

---- 因此,通過上述過程分析,$cbpsprofile的執行的結果就可以預見,該shell程式的執行,環境變數重新賦值僅僅在子程序中,程式執行完後,返回到父程序,父程序的環境變數是不會受到影響的

參考:posted @

2018-11-13 16:57

小時候挺菜 閱讀(

...)

編輯收藏

利用shell指令碼新增環境變數

在shell指令碼設定了環境變數,如export library path lib 執行了此指令碼後,在執行生成的可執行檔案,提示錯誤 error while loading shared libraries libww.so cannot open shared object file no su...

4月24 利用shell指令碼新增環境變數

在shell指令碼設定了環境變數,如export library path lib 執行了此指令碼後,在執行生成的可執行檔案,提示錯誤 error while loading shared libraries libww.so cannot open shared object file no su...

自動新增環境變數指令碼

主機很可能裝很多任務具鏈,通過乙個指令碼,可以實現當前工具鏈的自由切換 bin bash arg myir if 1 then export path home maker share myir toolchain gcc linaro 4.9 2014.11 x86 64 arm linux gn...