LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 2788|回复: 1

csh 内建指令 source (zt)

[复制链接]
发表于 2004-5-27 12:43:24 | 显示全部楼层 |阅读模式
原文见:
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 之後的執行情況,與原先的差別是相當大的。在使用上請多加注意。
 楼主| 发表于 2004-5-27 12:47:49 | 显示全部楼层
转引 shell 版 kj501 的一篇文章:

source命令的一个妙用
http://www.linuxsir.cn/forum.php?mod=viewthread&tid=20004
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表