3.4. Shells

在 FreeBSD裡,有一大堆每天進行的工作是在一個命令列的介面下完成的  ,而那就叫做 shell 。 一個 shell 的主要工作就是取得您輸入的指令並  解執行它。有很多的 shell 也擁有幫助我們完成每天的工作的內建功能像是  檔案管理,檔案全域樣式,命令列編輯,巨集指令,和環境變數。 FreeBSD 也內含了幾個 shell ,如 sh,Bourne Shell,和 csh,the C-shell。許多 其他的 shell 在 FreeBSD Ports Collection 可以找到且他們的功能也更強 大,如 tcsh 和 bash 。

你用哪一種 shell ? 這就要取決於你的喜好。 如果你是一個 C 語言  程式設計師,你使用 C-like 的 shell 會感到更舒適,如 tcsh。如果你是  從 Linux 轉過來的或是你是一個 UNIX 命令列的新手,你應該試試 bash 。  這點告訴我們每一個 shell 都有其獨特的特性,他們有可能適合或不適合你  的工作環境,你必須選一個你要用的 shell 。

shell 的其中一個共通特性是檔案名稱自動補齊功能。 只要打前幾個你  要的檔名或是指令,你可以按 TAB 鍵來自動補齊其餘的檔名或是指令。這裡  有一個例子。假設你有兩個檔案叫做foobarfoo.bar 。你要刪除 foo.bar。然後你在鍵盤上打: rm fo[TAB].[TAB].

shell 會顯示 rm foo[BEEP].bar.

[BEEP] 是 console 的嗶聲,是 shell 告訴我們它無法完成全部的檔名  因為有超過一個的檔案符合。foobarfoo.bar 都是 fo開頭的,但是他只能完成到 foo。 如果你打 .,然後再按一次 TAB 鍵,這時候 shell 就會為你完 成其餘的檔名。

另一個 shell 的功能是環境變數。環境變數是一個儲存在 shell 空間的變數對 這個空間能夠被任何程式用 shell 所呼叫,而且因此包含了很多程式的設定組態。 這裡是一些常用的環境變數和他們所代表的意義的列表:

變數詳細說明
USER現在登入的使用者名稱。
PATH以冒號分隔的目錄列表以便尋找執行檔的路徑。
DISPLAYX11 顯示連接的網路名稱,如果有的話
SHELL目前用的 shell 。
TERM使用者終端的名稱。 用來決定終端機的能力
TERMCAP Database entry of the terminal escape codes to perform various terminal functions.
OSTYPE作業系統的種類,如 FreeBSD
MACHTYPE現在系統所用的CPU。
EDITOR使用者喜好的編輯器。
PAGER使用者喜好的文字呼叫器。
MANPATH以冒號分隔的目錄以便尋找線上手冊。

在不同的 shell 底下環境變設的設定看起來有些許的不同。舉個例子  ,在 C-Style 的 shell 像是 tcsh 和 csh ,你會用setenv 去設定和觀看你的環境變數。而在 Bourne shells像是sh和bash,你會用 setexport去設定和觀看 你現在的環境變數。再舉個例子,要去設定或是修改 EDITOR 這個環境變數,在 csh 和 tcsh下要將編輯器設定為/usr/local/bin/emacs 的指令會是:

    % setenv EDITOR /usr/local/bin/emacs

而在 Bourne shells 則是:

    % export EDITOR="/usr/local/bin/emacs"

你也可以在命令列用$放在變數的前面來取得環境變數  。像是, echo $TERM就會顯示出$TERM的  設定值,因為 shell 取得了$TERM並把他傳給 echo 顯示出來。

Shell 裡有很多特殊字元代表著一些資料我們叫他做 meta-characters。  最常用的就是*這個字元,他代表檔名的任何字元。  這一些 meta-characters會被用在檔案名稱的全域樣式。舉例來說,鍵入 echo *是和ls有同樣的效果因 為 shell 將所有符合*的檔案傳到命令列給 echo 顯示出來。

為了防止這些特殊的字元被 shell 轉譯,我們可以在前面放一個  反斜線(\)讓他們跳脫出來。echo $TERM 會顯示出你所設定的終端機。而echo \$TERM就會直接 顯示出 $TERM 這幾個字。

3.4.1. 改變你的 shell

改變你的 shell最簡單的方法就是用chsh指令。  執行chsh將會進入你在環境變數中所設定的編輯器 EDITOR裡;如果你沒有設定,你將會進入vi 。改變"Shell:"這一行的對應值。

你也可以用chsh的參數-s; 這樣你就可以設定你的 shell而不用任何的編輯器。例如,你想要將 shell 改變到 bash,只要依照下面這樣做:

    % chsh -s /usr/local/bin/bash

執行 chsh而不加參數並且編輯也可以達到一向的作用。

Note: 你要使用的 shell 必須列在/etc/shells  裡面。如果你從ports collection安裝一個 shell ,那這個動作就不用再重複。如果你是手動自己安裝一個 shell,那 你就必須再手動做一次。

舉個例子,如果你手動安裝 bash並且裝到/usr/local/bin  裡面,你就必須:

    # echo "/usr/local/bin/bash" >> /etc/shells

然後重新再執行chsh