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 以冒號分隔的目錄列表以便尋找執行檔的路徑。
DISPLAY X11 顯示連接的網路名稱,如果有的話
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