網路農夫 --  Home 網路農夫 --  Home
網路農夫 --  Home
wait.....

4-1-2 環境變數 HOME 與預設變數 home

一個使用者在簽入後,環境變數 HOME 的初使值來自 /etc/passwd 檔案中的,並將設定值拷貝給預設變數 home,當成是 $home 的初始值。所以對一般的使用者而言,這兩個相關的變數都不需要特別去設定它們。

 

假使有一天,你因為執行計畫的需求,想將原 home 目錄 /home1/akira 改到目錄 /home1/akira/project,最簡單的作法是在“.cshrc”檔案中加入下行:

set home = /home1/akira/project

你或許會感到奇怪,為何設定是預設變數,而不是環境變數呢?這個原因是,當 login shell 產生之後,再去做修改環境變數 HOME 的動作時,預設變數 home 已經不會隨著它改變了。所以會造成環境變數 HOME 與預設變數 home 所分別設定的 home 目錄不同的情況。這樣便會造成很多問題。因為由 login shell 所產生的 subshell 或執行任何程式,它們所繼承的是 HOME 變數的設定值,所以他們的 home 目錄為 /home1/akira/project。而 login shell 的 home 目錄則是為 /home1/akira。這便是我們不採用設定環境變數的原因。

 

當你在 login shell 中再重新設定 home 的預設變數,它會將設定傳給環境變數 HOME。如此兩個變數的設定值才會一致。自然便不會產生上述的問題。

 

另外我們在此要為你釐清一項重要的觀念,那就是 C shell 用來代表 home 目錄的符號“~”,它實際上所代表 home 目錄是來自於預設變數 home 的設定值。而與環境變數 HOME 一點關係也沒有。讓我們來看下面的例子:

1 % setenv HOME /home1/akira/project ; echo $HOME
/home1/akira/project
2 % echo $home
/home1/akira
3 % cd ~ ; pwd
/home1/akira

由指令 1 到指令 2,我們可清楚地看到兩個變數的設定值已經不同,指令 3 則明顯地看出特殊符號“~”的設定值和預設變數 home 是相同。這樣可夠清楚了吧!所以說,更改 home 目錄對使用環境而言是一件非常非常重大的大事。使用者在未能真正地全盤性掌握自己的所有環境設定之前,最好不要輕易去更動它。如果真有需要更改,除了上述的情況之外,關於 C shell 的各種起始檔案與所有的特殊起始檔案,最好也將它們拷貝一份或者是使用連結的方式,將他們放一份在新的 home 目錄下,這樣會比較安全些。想要“搬家”,請千萬小心!!

 

版本:Beta-2001-05 -- 網路農夫