?? unix faq
字號:
發信人: wshu (樹上的老虎), 信區: Unix
標 題: UNIX FAQ 中文版(五)
發信站: BBS 水木清華站 (Mon May 19 10:14:57 1997)
本篇文章回答以下問題:
5.1) shell 要如何分類呢?
5.2) 在一個 shell script 里面要如? "include" 另一個 shell script 呢?
5.3) 是不是所有 shell 都有 alias,有沒別的替代方案呢?
5.4) 要如何設定 shell 的變數呢?
5.5) 要如何得知是否是在一 interactive shell 中?
5.6) 那些以 "." 開始其檔名的檔案在各種 shell 中的用途為何?
5.7) 我想要知道更多各種 shell 的相異之處。請指點明路。
5.1) shell 要如何分類呢?
一般來說,shell 可以分成兩類。第一類是由 Bourne shell 衍生出來的包括
sh,ksh,bash,與 zsh。第二類是由 C shell 衍生出來的,包括 csh 與
tcsh。除此之外還有一個 rc,有人認為該自成一類,有人認為該歸類在
Bourne shell。
把上面的分類法記住,就可以寫出所有 Bourne shell類的 shell 或是所有 C
shell 類的 shell 都可用的 script。
5.2) 在一個 shell script 里面要如何 "include" 另一個 shell script 呢?
由 Bourne shell 衍生者(包括 rc)用 "." 這個指令。由 C shell 衍生者則使
用 "source"。
5.3) 是不是所有 shell 都有 alias,有沒別的替代方案呢?
除了 sh 外,主要的 shell 都有 alias,不過用法不大一樣。例如有些 alias
不接受參數。
Bourne shell 類中 shell function 雖然嚴格說來不是 alias,不過也差不多了
。
Shell function 還可以做到一些 alias 所做不到的事情。從 Version 7 Unix
的衍生出來的系統(包括 System III 與 4.2BSD) 里面的 Bourne shell 沒有
shell function。System V 與 4.3BSD 的 sh 都有 shell function。
用 unalias 來去除 alias, 用 unset 來去除 shell function。
5.4) 要如何設定 shell 的變數呢?
在 C shell 類的 shell 中用 "set variable=value" 來設定只給這個 shell
看的變數,用 "setenv variable value" 來設定環境變數。要去除變數則以
unset 與 unsetenv 為之。在 Bourne shell 類的 shell 中則用
"variable=value" 來設定變數,若要將一變數并成環境變數則用 "export
VARIABLE_NAME"。要去除一個變數則用 unset。
5.5) 要如何得知是否是在一 interactive shell 中?
在 C shell 類中,看看 $prompt 這個變數便知分曉。
在 Bourne shell 類中,可以看 $PS1 這個變數,不過最好是檢查 $- 這個變
數。假如 $- 里有 i,那就表示是在 interactive shell 中。作法如下:
case $- in
*i*) # do things for interactive shell
;;
*) # do things for non-interactive shell
;;
esac
5.6) 那些以 "." 開始其檔名的檔案在各種 shell 中的用途為何?
下面的說明或許不盡完整,但應該講的都講了。
csh
有一些版本在系統中所有使用者都必須讀取的 .cshrc 與 .login。不
過,每一個版本放置這些檔案的地方不大相同。
啟動 (依照所列順序):
.cshrc - 每次都會讀取
.login - login shell 才會讀取
結束之前:
.logout - login shells.
其他:
.history - 儲存history (根據 $savehist 的值決定大小).
tcsh
啟動 (依照所列順序):
/etc/csh.cshrc - 每次都會讀取
/etc/csh.login - login shells 才會讀取
.tcshrc - 每次都會讀取
.cshrc - 假如沒有 .tcshrc 在的話
.login - login shells 才會讀取
結束之前:
.logout - login shells 才會讀取.
其他:
.history - saves the history (based on $savehist).
.cshdirs - saves the directory stack.
sh
啟動 (依照所列順序):
/etc/profile - login shell 才會讀取
.profile - login shell 才會讀取
結束之前:
any command (or script) specified using the command:
trap "command" 0
ksh
啟動 (依照所列順序):
/etc/profile - login shells 才會讀取
.profile - login shells 才會讀取
$ENV - always, if it is set.
結束之前:
如果你用了 trap "command" 0,則結束之際會執行 "command" (
bash
啟動 (依照所列順序):
/etc/profile - login shell 才會讀取
.bash_profile - login shell 才會讀取
.profile - 如果沒有 .bash_profile,則會在 login 時讀取
.bashrc - interactive non-login shell 才會讀取
$ENV - 若有設定則讀取之
結束之前:
.bash_logout - login shell 讀取之
其他:
.inputrc - Readline 初始化之時
zsh
啟動 (依照所列順序):
.zshenv - 若無 -f 就會讀取
.zprofile - login shell 嘔岫寥?
.zshrc - interactive shell 若無 -f 就會讀取
.zlogin - login shell 結束之前
結束之前:
.zlogout - login shell 才會讀取
rc
啟動 (依照所列順序):
.rcrc - login shell 才會讀取
5.7) 我想要知道更多各種 shell 的相異之處。請指點明路。
你可以用 anonymous ftp 在下列地點取得一份有關 sh、tcsh、ksh、
bash、zsh 與 rc 的詳細比較。
cs.uwp.edu (131.210.1.4):pub/vi/docs/shell-101.BetaA.Z
utsun.s.u-tokyo.ac.jp:misc/vi-archive/docs/shell-101.BetaA.Z
這個檔案中比較了呼叫 shell 時的旗號、程式的文法、輸出/入之轉向、與環
境變數。不過這個檔案并不討論以 "." 為檔名開頭的檔案以及環境變數與
函數的繼承。
--
※ 來源:·BBS 水木清華站 bbs.net.tsinghua.edu.cn·[FROM: 166.111.18.11]
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -