perl實現設定環境變數並執行程式
阿新 • • 發佈:2019-01-23
需求:perl指令碼控制實驗過程,由於不同的應用程式需要設定不同的實驗環境,因此需要根據輸入重置環境變數。環境變數的初始化方法為:source env.sh與source henv.sh,編譯命令為$compile,執行命令為$run,要求必須在重置的環境變數裡編譯執行程式。
在perl腳本里通過system呼叫系統呼叫實現,但是system都是單獨的程序,一旦返回後,其建立的環境也會丟失,因此需要由system派生的程序同時執行建立環境、編譯與執行工作(至於為什麼perl不能將環境變量回傳給父程序,可參考附錄1)。因此需要將perl命令寫成如下形式:
system("source $env.sh && $compile && $run" );
另外,source是shell內嵌命令,因此直接呼叫例如:
system("source $env.sh")
上述做法並不會真正改變system派生子程序的環境變數,必須通過在後面加&&或者顯式直接呼叫shell命令才可以,正確做法如下所示:
1)system("source $env.sh && which gcc"),因為當程序找不到命令source時,第一次時並不會搜尋相關指令,第二次則會。
2)system("/usr/bin/shell", "-c", "source $env.sh");
但是,我現在未找到在2)情形下如何執行多個命令的方法,有人知道不?