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'權限,還可以使您的設置更有個性。當系統級與用戶級的設置發生沖突時,將采用用戶的設置
提示符
每次當您打開一個控制臺(console)或 xterm 時,最先看到的就是提示符(prompt),類似于:
aclearcase/" target="_blank" >ccount@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="\[3[1m\][\w]\[3[0m\] "
'root'在'~/.bashrc'中的設定 是:
PS1="\[3[0;31m\][\w]\[3[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' Ƈ30m' ' 31m' Ƈ31m' ' 32m' \
Ƈ32m' ' 33m' Ƈ33m' ' 34m' Ƈ34m' ' 35m' Ƈ35m' \
' 36m' Ƈ36m' ' 37m' Ƈ37m'
do FG=${FGs// /}
echo -en " $FGs 3[$FG $T "
for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
do echo -en "$EINS 3[$FG3[$BG $T 3[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'文件中.
#vi ~/.bash_profile
請不要在'.bashrc'中設置 PATH ,否則會導致 PATH 中目錄的意外增長。您每次打開一個新的 shell ,'.bashrc'都會作用。所以如果在該文件中添加目錄,您每次打開一個終端,目錄又會被添加。這將導致 PATH 變量由于目錄復制,不斷地增長。