網頁

2013年3月26日

怎麼再shell script中設定目前所用的環境變數或是改變所在目錄

若沒有做一些特殊安排是做不到的。因為,當我們創造出 child process 時,child process 會繼承其 parent process 的變數與所在的目錄。在這個 child process 只能改到自己的變數與所在目錄而無法影響到其 parent process。

要達到此目的, parent process 要與 child process 有一個溝通的機制。當  child process 要改變變數值時得把要改變的變數及其內容寫到一個講好的地方,讓 parent process 去讀取, 並改變 parent process 的變數。

另一個做法則是寫一個 shell script,然後在 Bourne shell 或 Korn shell 中用 ".",在 C shell 中用 source 去執行那個  shell script。 若此 script 名為 "myscript" :

在 Bourne shell 或 Korn shell 中就用
. myscript

在 C shell 中則用
source myscript

利用這種方式執行 shell script 時,是利用原本的parent process直接執行,而不是 fork 出一個新的 child process 去執行,透過這種方式,就可以保留環境變數或者是改變所在目錄。

總而言之,這個問題算是先天上的限制,也是一種 parent prcoss 和 child process 溝通上的一種機制。

Reference

沒有留言:

張貼留言