|
原文见:
http://netlab.cse.yzu.edu.tw/~st ... s/csh/no3-8-03.html
source [-h] filename 指令
[-h] 選項 將所讀取的指令列入過去指令使用記錄(history list)中,但?K不執行所讀入的指令。
source 指令能?闹付ǖ臋n案中讀取指令?韴绦校S靡詧绦行薷倪^後的特殊檔案,如“.cshrc”、“.login”檔案等。比方你以 vi 指令更改“.cshrc”的 path 變數後,要如何?怼皥绦小蹦兀磕惚仨毷褂 source 這個內建指令?韴绦兴H缦拢
% source ~/.cshrc
執行後 path 變數便是你所更新的設定值。這可是一個相當重要的內建指令。
在使用 source 指令?碜x取檔案的執行過程中,請注意一個特殊情況。就是一但產生指令無法執行或產生錯誤時,則執行的動作將會在該指令行被終止,未執行部份將不再執行。關於這種情況,我們用指令 source ?韴绦幸粋分離的別名檔案?碜稣f明:
假定檔案“.aliases”內容為下:
2 % cat -n .aliases
1 alias rmr rm -r
2 alias cd 'cd \!*;set prompt = "\! <$cwd>
3 alias vicsh 'vi \!:1 ; chmod u+x \!:1'
4 alias lsa ls -asF
3 % source .aliases
Unmatched '.
4 % alias
rmr rm -r
5 %
當我們以執行指令“source .aliases”時,產生錯誤?息“Unmatched '.”。表示檔案“.aliases”中有不合語法的 alias 設定,產生了無法執行的情況。此時我們用指令 alias ?砜次覀儓绦谐晒Φ膭e名時,發現僅第一行設定成功,而第二至第四行均沒有被設定。這是因為我們用指令 source 執行檔案“.aliases”時,讀取檔案的第二行要執行時,產生了的語法錯誤,指令 source 於是便停止以下各行指令的“執行”所造成的結果。當然第二行以後便不會執行讀取的動作了。
此外在不加選項情況下使用 source 指令,執行時所讀取執行的指令?K不會加入 history list 中。如果有需要加入 history list 中,必需加選項 -h。但加上選項 -h 的執行方式與不加選項 -h 時,有相當大的差?。首先是它只讀取整個檔案的所有指令行進入 history list 中,但?K不執行指令行。其次是它也不會檢查指令行的語法是否正確。所以在產生像上述的錯誤時,加上選項 -h 的指令 source,依然會繼續讀取下一行直到整個檔案讀取完畢為止。讓我們再利用上面的檔案“.aliases”?碚f明:
18 % csh -v
1 % alias
alias
首先我們執行 csh -v,用意在產生一個可觀看執行情況的 subshell。當執行指令 alias 查看時發現到?K沒有任何別名已設定。
2 % source -h .aliases
source -h .aliases
alias rmr rm -r
alias cd 'cd \!*;set prompt = "\! <$cwd>
alias vicsh 'vi \!:1 ; chmod u+x \!:1'
alias ls ls -asF
此時我們執行指令 source -h .aliases,可明顯得看出檔案內容被全部讀取,而且也沒有錯誤?息產生了。
7 % alias
alias
8 % history ; exit
history ; exit
1 alias
2 source -h .aliases
3 alias rmr rm -r
4 alias cd 'cd \!*;set prompt = "\! <$cwd>
5 alias vicsh 'vi \!:1 ; chmod u+x \!:1'
6 alias ls ls -asF
7 alias
8 history ; exit
9 % 19 %
我們再用指令 alias 查看別名設定,結果依舊是沒有任何設定。然後用指令 history 卻清楚看到所讀取的指令行已列入其中。我們可清楚地了解到 source 指令加上選項 -h 之後的執行情況,與原先的差別是相當大的。在使用上請多加注意。 |
|