轉自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中運行,類似於"輸入重定向"。
