在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卻沒有看到變化,因為這樣執行等於說不在當前程序
那麼。這是為什麼呢?
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程式的執行,環境變數重新賦值僅僅在子程序中,程式執行完後,返回到父程序,父程序的環境變數是不會受到影響的
參考:
利用shell指令碼新增環境變數
在shell指令碼設定了環境變數,如export library path lib 執行了此指令碼後,在執行生成的可執行檔案,提示錯誤 error while loading shared libraries libww.so cannot open shared object file no su...
利用shell指令碼新增環境變數
在shell指令碼設定了環境變數,如export library path lib 執行了此指令碼後,在執行生成的可執行檔案,提示錯誤 error while loading shared libraries libww.so cannot open shared object file no su...
4月24日 筆記
mysql索引的建立對於mysql的高效執行是很重要的,索引可以大大提高mysql的檢索速度。這是最基本的索引,它沒有任何限制。它有以下幾種建立方式 create index indexname on mytable username length 如果是char,varchar型別,length可...