[-h] 選項 將所讀取的指令列入過去指令使用記錄(history
list)中,但並不執行所讀入的指令。
source 指令能從指定的檔案中讀取指令來執行,常用以執行修改過後的特殊檔案,如“.cshrc”、“.login”檔案等。比方你以
vi 指令更改“.cshrc”的 path 變數後,要如何來“執行”呢?你必須使用 source 這個內建指令來執行它。如下:
% source ~/.cshrc
執行後 path 變數便是你所更新的設定值。這可是一個相當重要的內建指令。
在使用 source 指令來讀取檔案的執行過程中,請注意一個特殊情況。就是一但產生指令無法執行或產生錯誤時,則執行的動作將會在該指令行被終止,未執行部份將不再執行。關於這種情況,我們用指令
source 來執行一個分離的別名檔案來做說明:
假定檔案“.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 來看我們執行成功的別名時,發現僅第一行設定成功,而第二至第四行均沒有被設定。這是因為我們用指令
source 執行檔案“.aliases”時,讀取檔案的第二行要執行時,產生了的語法錯誤,指令 source 於是便停止以下各行指令的“執行”所造成的結果。當然第二行以後便不會執行讀取的動作了。
此外在不加選項情況下使用 source 指令,執行時所讀取執行的指令並不會加入 history
list 中。如果有需要加入 history list 中,必需加選項 -h。但加上選項 -h 的執行方式與不加選項 -h
時,有相當大的差異。首先是它只讀取整個檔案的所有指令行進入 history list 中,但並不執行指令行。其次是它也不會檢查指令行的語法是否正確。所以在產生像上述的錯誤時,加上選項
-h 的指令 source,依然會繼續讀取下一行直到整個檔案讀取完畢為止。讓我們再利用上面的檔案“.aliases”來說明:
18 % csh -v
1 % alias
alias
首先我們執行 csh -v,用意在產生一個可觀看執行情況的 subshell。當執行指令
alias 查看時發現到並沒有任何別名已設定。
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 之後的執行情況,與原先的差別是相當大的。在使用上請多加注意。