在 UNIX 的早期(二十多年以前),用戶通常通過一個啞終端來訪問 UNIX 計算機 。您需要在登錄提示符處輸入用戶 ID 和密碼,而系統(tǒng)將為您的會話產(chǎn)生一個新的登錄 Shell 。在這種環(huán)境中,登錄 Shell 和其他的 Shell 實例(比如那些運行 Shell 腳本的 Shell)通過名字相互區(qū)別:每個登錄 Shell 的進程名字都以一個連字符作為前綴,如 -bash 。這個特殊的名字(歷史悠久的 UNIX 產(chǎn)物)可以告訴 Shell 為登錄工作運行任何特殊的配置 。
交互的 Shell 更容易解釋:如果 Shell 對您的輸入(標準輸入)作出反應(yīng)并顯示相應(yīng)的輸出(標準輸出),那么這個 Shell 是交互的 。現(xiàn)在,X 終端已經(jīng)取代了啞終端,但是 Shell 模式的約定和范例仍然保留了下來 。通常,X 終端作為 -bash 產(chǎn)生 Bash,強制 Bash 執(zhí)行登錄啟動序列 。
對于 Bash,交互的登錄 Shell 將運行 /etc/profile,如果它存在 。(如果使用 bash --login 調(diào)用 Bash,那么非交互的 Shell 也運行 /etc/profile 。)接下來,交互的登錄 Shell 尋找 ~/.bash_profile,如果這個腳本存在并且是可讀的,那么將執(zhí)行這個腳本 。否則,Shell 將繼續(xù)嘗試執(zhí)行 ~/.bash_login 。如果后面的那個文件不存在或者是不可讀的,那么 Bash 最后將嘗試執(zhí)行 ~/.profile 。Bash 僅運行一個針對個人的啟動文件,然后立即停止啟動序列 。當 Bash 登錄 Shell 退出時,它將執(zhí)行 ~/.bash_logout 。
如果 Bash Shell 是交互的,但不是登錄 Shell,那么 Bash 將嘗試讀取 ~/.bashrc 。并不執(zhí)行其他的文件 。如果 Bash Shell 是非交互的,那么它將擴展 BASH_ENV 環(huán)境變量的值,并執(zhí)行所指定的文件 。
當然,您可以在 Bash 的標準腳本中調(diào)用自己的腳本,以便提供附加的設(shè)置 。特殊的 Shell 縮寫 .(或者它的同義詞 source)表示執(zhí)行另一個 Shell 腳本 。例如,如果您希望在交互的登錄 Shell 和交互的非登錄 Shell 之間共享 ~/.bashrc 中的設(shè)置,可以使用下面的命令:
. ~/.bashrc
在 ~/.bash_profile 中 。當 Shell 碰到點 (.) 命令時,它將立刻執(zhí)行指定的 Shell 腳本 。
深入研究 Shell
研究啟動序列的最好的方法是創(chuàng)建一些簡單的 Shell 啟動文件 。例如,如果您運行 ssh farfaraway ls 命令,SSH 在遠程系統(tǒng)上產(chǎn)生的名為 farfaraway 的遠程 Shell 是一個登錄 Shell 嗎?是交互的 Shell 嗎?讓我們來找出答案 。
清單 1、2、3、和 4 分別地顯示了示例 /etc/profile、~/.bash_ profile、~/.bashrc、和 ~/.bash_logout 文件 。(如果這些文件已經(jīng)存在,在您繼續(xù)這個練習(xí)之前請進行備份 。要更改 /etc/profile,您需要在您的計算機上有超級用戶的權(quán)限 。)使用您最喜愛的文本編輯器創(chuàng)建如下所示的文件 。
清單 1 顯示了示例 /etc/profile 腳本 。這個文件是第一個運行的啟動文件(如果它存在并且是可讀的) 。
清單 1. 示例 /etc/profile 文件
echo "Executing /etc/profile."
PATH="/bin:/sbin:/usr/bin:/usr/sbin"
export PATH
清單 1 回應(yīng)一條消息作為腳本的開始,并且設(shè)置最小限度的 PATH 變量 。同樣地,如果 Shell 是交互的登錄 Shell,那么將運行這個文件 。例如,啟動一個新的 X 終端 。您應(yīng)該看到與下面所示類似的內(nèi)容:
Last login: Tue Apr 17 21:06:23 on ttyp1
Executing /etc/profile
(Interactive, login shell)
Executing /Users/strike/.bash_profile
(Interactive, login shell)
Including /Users/strike/.aliases
strike @ blackcat 1 $
很好!當您在 X 終端中啟動一個新的登錄 Shell 時,將看到這個可預(yù)知的序列 。請注意 Shell 提示符:它反映出了用戶名、簡寫的主機名(第一個點前面的部分)、以及命令編號 。
如果您在提示符處輸入 logout 或者 exit,您應(yīng)該看到下面的信息:
推薦閱讀
- 對話 UNIX,第 9 部分: 正則表達式
- 對話 UNIX,第 6 部分: 通過腳本實現(xiàn)操作的自動化
- 提升UNIX中文件系統(tǒng)使用效率
- SCO UNIX基礎(chǔ)講座--第十一講:TCP/IP 管理
- 什么是第二人格
- 基本配置及操作 SCO UNIX學(xué)習(xí)寶典
- SCOUNIX基礎(chǔ)講座--第八講:監(jiān)視進程管理
- Stty使用技巧一則
- SCO UNIX 5.0.4 DAT磁帶機安裝
- 初識夏新M350——外觀第一感
