Subject: C shell 變數之意義及其應用
X-Forwarded-By: guest (參觀用帳號)
X-Disclaimer: ☆ 清華電機 BBS ☆ 對本信內容恕不負責。
Precedence: list
Status: RO
X-Status:
┌─────────────────────────────┐
│ 本文版權歸屬清華大學計算機與通訊中心林貞伶小姐 │
│ 非經同意請勿任意轉載 jlin@cc.nthu.edu.tw │
└─────────────────────────────┘
C SHELL變數之意義及其應用
SHELL,顧名思義,是包裝著UNIX作業系統核心的殼,它扮演一個命
令編譯者的角色,使用者乃透過它、間接地和UNIX系統的核心溝通,
而SHELL也就成為使用者在UNIX作業系統內工作時所直接感受到的環境。
因此,當您覺得UNIX"好用或不好用"、"方便或不方便",可能都和您所使
用的SHELL有著極密切的關聯。
對一般使用者接觸的比較多的DOS作業系統而言,它唯一的命令編譯
器是COMMAND.COM,使用者並沒有什麼選擇的機會;但在UNIX作業系統中,
使用者除了標準shell(sh)外,還有csh、tcsh、ksh、bash等不同的選
擇,這些不同的SHELL各有其處理命令的程序與方式,而為了保留使用者
使用時的彈性,以便於設定一最適合個人的環境,這些SHELL也都預留了
某些特定的變數,以做為使用者啟動、改變或關閉某些它特有的特定功能
的指標。這些能啟動或關閉某些特定功能的變數即是所謂的Shell Variable
(sh中並無此類變數)。
在C Shell中我們可用'set'與'unset'指令來設定或取消某些變數及
其所代表的特定功能,以下我們就對C Shell常用的Shell Variable之意
義及功能做一簡單介紹:
(一) Filename Completion的相關變數
1. filec
在設定此變數後(set filec),就啟動了csh中Filename
Completion的功能。如此,只要我們在提示符號(如thccy5%)之
後輸入一個或數個字元、按鍵,csh便會在現行路徑下尋找
以這些字元為名稱開頭的目錄或檔案、並將未完成的部分自動填
上,如您想更換目錄到compress中,則只要下類似
cd co (按)
則csh在搜尋、補填後的指令將成為
cd compress
若以"co"為名稱開頭的檔案不止一個,則不做自動補填的動作,
並有一"嗶"的警告聲,此時可用CTRL-D令其列出所有以"co"為
檔名開頭的檔案及目錄。
很明顯的,這個功能可讓使用者省去一些輸入的動作,當
然也避免掉輸入長串檔名時可能發生的錯誤。
2. fignore
設定方式: set fignore = "[字串]"
如前述,在啟動了Filename Completion的情況下,若再加
上此一設定,那麼當您按鍵做檔名比對搜尋時,將跳過上
一{字串},如:
set fignore = "compress"
則當您下 cd co
按補填檔名時,便不考慮compress這個檔案或目錄。
3. nobeep
如前述,當按鍵、而找到數個符合條件的檔名時,csh
會發出一"嗶"的警告聲,若set nobeep,則不會有此警告聲。
(二) Command History的相關變數
1. history
csh可紀錄使用者自簽入到簽退之間所執行過的指令(不包含
無法執行的指令),並給予每一個紀錄下來的指令一個編號,使
用者可用"!n"(n為編號)代替原來的一長串命令。指令的編號可
以'history'指令(為csh的內鍵指令)查看,至於history將為使用者
紀錄、顯示多少個執行過的指令,則以
set history = n
加以設定(注意n越大、所使用的記憶體就越多)。
因history只紀錄可以執行的指令,因此使用"!n"執行某一
命令時,除了可節省敲鍵盤的時間外,也可以避免'敲錯鍵'情形
之發生。
2. histchars
如前述,"!"可用此變數設定而改用其他符號代替,如:
set histchars = "#"
則"#1"即代替history紀錄中編號1的指令。
3. savehist
設定方式: set savehist = n (n為數字)
若您使用csh,則在您個人帳號下可能可以找到~/.history
這個檔案,而在~/.history中所記載的指令都將在使用者啟動csh
時即納入history的紀錄中,也就可以用"!n'的方式來使用這些
指令。
如果希望~/.history時時更新,可對savehist這個變數加以
設定(如前),則當使用者從某一帳號中簽退時,csh會把history
紀錄中的最後那n筆紀錄存到~/.history中,以供下次再簽入時
使用。要注意的是:若~/.history中的紀錄筆數過多或是n過大,
就可能會降低sh的啟動速度。
(三) 其餘常用變數
1. path
設定方式: set path = ([PATH1] [PATH2] ...)
設定指令尋找的路徑,這個SHELL變數的設定將可更新PATH
這個環境變數。要注意的是:csh不會自動在現行路徑下尋找
所要執行的執行檔,所以若希望它也能在現行路徑中尋找,必須
在設定時加入"."這個路徑,如
set path = (/bin /usr/local/bin .)
若希望先在現行路徑下尋找,請將"."移到括號內第一個位置。
2. prompt
可設定提示符號的形式,如
set prompt = "`pwd`% "
即是將提示符號定為pwd指令的執行結果再加上一"%"。
3. echo
設定方式: set echo
在這個設定下,csh會在執行指令前重覆一次這個指令,再
緊接著執行這個命令。若這個指令中包含了!(history
substitution)、$(variable substitution)、*(filename
substitution)或是指令本身即是一被設定好的alias時,csh都
會將它們依次解讀、一一顯示,再依序執行。這個設定的好處在
於:使用者能對解讀後的命令內容及每一個命令的執行結果都
一目瞭然。
4. verbose
設定方式: set verbose
這個設定與echo類似,但它僅將history substitution(!)
的解讀結果在執行命令前列出,不似set echo狀態下的詳細。
5. home
這個變數中存放了個人home directory的位置,設定方式為
set home = "[路徑位置,如/usr]"
home變數設定的改變也會更新HOME這個環境變數的內容,而當
我們直行''cd'或'cd ~'指令,也都是參考這個變數所記載的路
徑來決定要更換到那一個目錄下,如
set home = "/"
則當執行cd或cd ~後,新的目錄位置將是/(root)。
6. ignoreeof
設定方式: set ignoreeof
在各種shell中,CTRL-d皆為一檔尾符號(EOF),它可結束在
畫面上一'等待輸入的狀態',如在畫面出現提示符號即表示shell
正等待使用者輸入指令,此時若鍵入CTRL-d就會結束這種等待狀
態、並因而結束這個shell的執行。
若啟動了ignoreeof,則是忽略CTRL-d的此種作用,亦即使
CTRL-d鍵失效。
7. noclobber
設定方式: set noclobber
在啟動了這個變數後,當使用者需做檔案轉向(>)即無法覆
蓋已存在的檔案,如執行'ls > filelist',其中的filelist若
是一已存在檔案,這個轉向動作就無法執行。
8. noglob
設定方式: set noglob
在這個設定下,csh將*等萬用字元視為一般字元,所以,如
果您發現您的帳號內有一名為*或r*之類的檔案,那麼我們可以
確定它們一定是在設定了noglob的情況下所建立,也一定要在設
定了noglob的情況下加以刪除(而不至波及其他檔案)。
9. nonomatch
設定方式: set nonomatch
我們經常會以萬用字元來尋找某一類型的資料,如執行
ls -l r* 或 more r*
若找不到合乎條件的檔案,一般會出現'No match'的錯誤訊息,
而在加上這個設定後,則將出現
[形式(如r*)] not found
之訊息。
10. shell
記載一個帳號的login shell,但它的改變並不會使環境變數中的
SHELL變數跟著更動,也不會影響下次簽入時所使用的shell,設
定方式如 set shell = "/bin/csh"
在瞭解了C SHELL中各變數的意義及用法後,使用者便可針對自己的
需要設定自己的環境,也可進一步將想啟動或設定的變數一起列入~/.cshrc
或~/.login等start file中,而在簽入時即一併設定。
簽入後,使用者可用"set"指令查看自己的環境中變數設
定及啟動的情況,若暫時不需要已設定的某一變數,可用
unset [變數名稱]
取消設定或是再執行
set [變數名稱] = "[變數內容]"
覆蓋、改變之前的設定。
對任何東西而言,瞭解都是應用的開始,希望這篇對csh變數之介紹
能是您在UNIX系統中隨心所欲、創造環境的開始。