一、bash 設定檔
在您的 home 目錄下,運行
ls .bash*
您將看到這些檔案:
l .bash_history :記錄了您以前輸入的命令,l .bash_logout :當您退出 shell 時,要執行的命令,
l .bash_profile :當您登入 shell 時,要執行的命令,
l .bashrc :每次開啟新的 shell 時,要執行的命令。
請注意後兩個的區別:'.bash_profile'只在會話開始時被讀取一次,而'.bashrc'則每次開啟新的終端(如新的 xterm 視窗)時,都要被讀取。按照傳統,您得將定義的變數,如 PATH ,放到'.bash_profile'中,而象 aliases(別名)和函數之類,則放在'.bashrc'。但由於'.bash_profile'經常被設定成先讀取'.bashrc'的內容,您如果圖省事的話,就把所有配置都放進'.bashrc'。
這些檔案是每一位使用者的設定。系統級的設定儲存在'/etc/profile'、'/etc/bashrc'及目錄'/etc/profile.d'下的檔案中。但您得習慣用各自的設定檔:編輯不需要'root'許可權,還可以使您的設定更有個性。當系統級與使用者級的設定發生衝突時,將採用使用者的設定。
讀取'.bashrc'的內容,您如果要省點事的話,就把您所有的配置都放進'.bashrc'。
上面的這些檔案是每位使用者的設定,系統級的設定儲存在'/etc/profile'、'/etc/bashrc'及目錄'/etc/profile.d'下的檔案中。您最好習慣使用各自的設定檔:編輯不需要'root'許可權,還可以使您的設定更具個性。當系統級與使用者級的設定發生衝突時,將優先採用使用者的設定。
二、提示符
每次當您開啟一個控制台(console)或 xterm 時,最先看到的就是提示符(prompt),類似於:
account@hostname ~ $
在預設設定下,提示符將顯示您的使用者名稱、主機名稱(預設是'localhost')、當前所在目錄(在 Unix 中,'~'表示您的 home 目錄)。
按照傳統,最後一個字元可以標識您是普通使用者($),還是'root'(#)。
您可以通過 $PS1 變數來設定提示符。命令
echo $PS1
將顯示當前的設定。其中可用字元的含義在 man bash 的'PROMPTING'部分有說明。
如何才能完成理想的設定呢?對於健忘的初學者來講,預設設定有些不友好,因為提示符只顯示目前的目錄的最後一部分。如果您看到象這樣的提示符
tom@localhost bin $
您的目前的目錄可能是'/bin'、'/usr/bin'、'/usr/local/bin'及'/usr/X11R6/bin'。當然,您可以用
pwd (輸出目前的目錄,print working directory)
能不能叫 shell 自動告訴您目前的目錄呢?
當然可以。這裡我將提到的設定,包括提示符,大都包含在檔案'/etc/bashrc'中。您可以通過編輯各自 home 目錄下的'.bash_profile'和'.bashrc'來改變設定。
在 man bash 中的'PROMPTING'部分,對這些參數(parameter)有詳細說明。您可以加入一些小玩意,如不同格式的目前時間,命令的記錄號,甚至不同的顏色。
在'~/.bashrc'中,我喜歡的設定是:
PS1="/[/033[1m/][/w]/[/033[0m/] "
'root'在'~/.bashrc'中的設定 是:
PS1="/[/033[0;31m/][/w]/[/033[0m/] "
這樣我得到的提示符就是:
[/usr/bin]
當用'root'時,變成:
[/usr/bin]
我已經除掉了主機名稱和使用者名稱,因為我用不著這些。但我首先想一眼就能看出我的身份是普通使用者還是'root'。注意到,普通使用者的提示符可以是黑底白字,或白底黑字。
要在終端上獲得恰當的顏色調配, 您可以編輯下面這個指令碼color ,賦予執行許可權(chmod +x color),然後再運行。
#!/bin/bash#
# This file echoes a bunch of color codes to the
# terminal to demonstrate what's available. Each
# line is the color code of one forground color,
# out of 17 (default + 16 escapes), followed by a
# test use of that color on all nine background
# colors (default + 8 escapes).
#
T='gYw' # The test text
echo -e "/n 40m 41m 42m 43m/
44m 45m 46m 47m";
for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' /
'1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' /
' 36m' '1;36m' ' 37m' '1;37m';
do FG=${FGs// /}
echo -en " $FGs /033[$FG $T "
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
do echo -en "$EINS /033[$FG/033[$BG $T /033[0m";
done
echo;
done
echo
一種更適當的設定:
PS1="/u: /w//$ "
這樣,提示符就變成:
user_name: /usr/bin$
您可以通過命令 export 來測試不同的設定(比如,export PS1="/u: /w//$ ")。如果找到了適合的提示符,就將設定放到您的'.bashrc''中。這樣,每次開啟控制台或終端視窗時,都會生效。
您甚至可以給提示符設定主題(theme),也就是搭配不同的顏色,使其看起來象很棒的 ol
的 C64 提示符。如果您對此感興趣,可以看一下
Bashish( http://hem.passagen.se/arnognulf/index2.html )。
三、改變 $PATH
'$PATH'與'$PS1'一樣,也是環境變數。輸入
set
將列出所有當前定義的環境變數。
您看到的這些環境變數在 shell 的設定檔中定義,可能是使用者自己的設定檔,也可能是由'root'通過'/etc'下面的系統級檔案定義的。如果您使用 X ,更多的一些變數將由 X 、您的視窗管理器或案頭環境的開機檔案配置。
如果對這些設定不很清楚,您暫時最好不要隨便改動。瞭解如何改變 $PATH 變數很有用,因為這個變數決定了 shell 將到哪些目錄中尋找命令或程式。如果要執行的命令的目錄在 $PATH 中,您就不必輸入這個命令的完整路徑,直接輸入命令就可以了。一些第三方軟體沒有將可執行檔放到 Linux 的標準目錄中。因此,將這些非標準的安裝目錄添加到 $PATH 是一種解決的辦法。此外,您也將看到如何處理一般的環境變數。
首先,作為慣例,所有環境變數名都是大寫。由於 Linux 區分大小寫,這點您要留意。當然,您可以自己定義一些變數,如'$path'、'$pAtH',但 shell 不會理睬這些變數。
第二點是變數名有時候以'$'開頭,但有時又不是。當設定一個變數時,您直接用名稱,而不需要加'$':
PATH=/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin
要擷取變數值的話,就要在變數名前加'$':
echo $PATH
/usr/bin:/bin:/usr/local/bin:/usr/X11R6/bin
否則的話,變數名就會被當作普通文本了:
echo PATH
PATH
處理 $PATH 變數要注意的第三點是:您不能只替換變數,而是要將新的字串添加到原來的值中。在大多數情況下,您不能用'PATH=/some/directory',因為這將刪除 $PATH 中其他的所有目錄,這樣您在該終端運行程式時,就不得不給出完整路徑。所以,只能作添加:
PATH=$PATH:/some/directory
這樣,PATH 被設成當前的值(以 $PATH 來表示)+新添的目錄。
到目前為止,您只為當前終端設定了新的 $PATH 變數。如果您開啟一個新的終端,運行 echo $PATH ,將返回舊的 $PATH 值,而看不到您剛才添加的新目錄。因為您先前定義的是一個局部環境變數(僅限於當前的終端)。
要定義一個全域變數,使在以後開啟的終端中生效,您需要將局部變數輸出(export),可以用'export'命令:
export PATH=$PATH:/some/directory
現在如果您開啟一個新的終端,輸入 echo $PATH ,也能看到新設定的 $PATH 了。請注意,命令'export'只能改變當前終端及以後啟動並執行終端裡的變數。對於已經啟動並執行終端沒有作用。
為了將目錄永久添加到您的 $PATH ,只要將'export'的那行添加到您的'.bash_profile'檔案中。
請不要在'.bashrc'中設定 PATH ,否則會導致 PATH 中目錄的意外增長。您每次開啟一個新的 shell ,'.bashrc'都會作用。所以如果在該檔案中添加目錄,您每次開啟一個終端,目錄又會被添加。這將導致 PATH 變數由於目錄複寫,不斷地增長。