利用SHELL腳本修改當前環境變量


轉自http://www.chinaunix.net/old_jh/7/21485.html

1.背景 
---- 在日常的工作中,為了設置一大批環境變量,我們通常編輯了一個shell程序,包含了多個的變量設置,然后運行它。如何運行它呢?通常我們用$. cbpsprofile命令,確實改變了當前shell的環境變量;而直接運行該shell程序時,$cbpsprofile卻不能改變當前shell的環境變量.這兩種方式的差別何在?原理上有何差別?這是本文討論的重點.  

---- 假設:我們編輯的shell程序是:cbpsprofile,其中包含了大量環境變量,如:INFORMIXDIR,INFORMIXSERVER,PATH,ONCONFIG的設置.  

2.原理分析  

---- 在UNIX系統中,我們在運行shell程序或系統命令的過程如下:  

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

---- 首先,當前的shell會調用:fork()命令,產生一個subprocess,該子進程完全復制了父進程的所有環境;  

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

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

3.點(.)的功能  

---- .在shell中的含義如下:在當前shell中,運行后續的shell程序,不再產生子進程的過程。相當於:將shell程序中的命令,逐條在當前shell中運行,類似於"輸入重定向"。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM