星期六, 7月 07, 2007

Bash 筆記

Bash Notes

* Bash & Tcsh 差異對照表:


比較項目
Bash
Tcsh
設定環境變數
export var=value
setenv var value
設定變數
var=value
set var=value
代名 alias
alias var=value
alias var value
提示符變數名
PS1
prompt
共用設定檔
/etc/profile
/etc/csh.cshrc
個人設定檔
~/.profile
~/.cshrc
一般用戶提示符
$
%
顯示何種 shell
echo $SHELL
echo $shell
優點
shell script模組化
history 機制較佳


* "Bash" stands for "Bourne Again Shell"

# Bash 在許多 Linux Distribution 被當成預設的 Shell,
# 設定與指令與 tcsh/csh 有點出入,如環境變數。


* Bash 設定檔:

# Bash 在 Login 後如為預設 Shell 時,依照下列順序讀取設定檔:
1. /etc/profile
1a. /etc/bashrc (Red-Hat Linux Only)
2. ~/.bash_profile
2a. ~/.bashrc (Red-Hat Linux Only)
3. ~/.bash_login
4. ~/.profile

# Bash 在 Logout 後會讀取:
~/.bash_logout

# Bash 不是登入時的 Shell (由其他 Shell 啟動)會讀取:
~/.bashrc


* 設定較佳的 ll 指令

# 各 user 自訂
echo "alias ll='ls -alF'" >> ~/.bash_profile
echo "alias ll='ls -alF'" >> ~/.bashrc

# 所有使用 bash 當預設 shell 者
echo "alias ll='ls -alF'" >> /etc/profile
echo "alias ll='ls -alF'" >> /etc/bashrc

# 記得用 source /etc/profile 來生效


* 設定較佳的 prompt

# 我只有把預設的 \W 改成小寫 \w 來顯示完整路徑名。
# 彩色可參考:http://tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37

# 單色
echo 'PS1="[\u@\h \w]\\$ "' >> /etc/bashrc

# 彩色
echo ' PS1="[\[\033[36m\]\u\[\033[1;34m\]@\h \[\033[m\]\w]\[\033[35m\]\\$\[\033[m\] "' >> /etc/bashrc

# 如果用 xterm 相容終端機就顯示彩色 Prompt
# 在 /etc/bashrc 或 /etc/profile 中加上
    if [ "$TERM" = "xterm" ]; then
      PS1="[\[\033[36m\]\u\[\033[32m\]@\h \[\033[m\]\w]\[\033[35m\]\\$\[\033[m\] "
    elif [ "$TERM" = "linux" ]; then
      PS1="[\[\033[36m\]\u\[\033[32m\]@\h \[\033[m\]\w]\[\033[35m\]\\$\[\033[m\] "
    else
      PS1="[\u@\h \w]\\$ "
    fi

source /etc/bashrc

* 關掉 beep

# 修改 /etc/inputrc 加入或把此行註解移除:
set bell-style none


* 讓按上下方向鍵的行為與 tcsh 相同

csh/tcsh 最讓人稱道的就是 history 的功能,這也是 bash 不如 csh 的地方,當然
現在的 bash 在 history 機制上也偷學了不少 csh 的功能並加強了,有用過 csh 的
人都知道 csh 有一個很好用的機制,就是可以用上下鍵來尋找最近輸入過以某幾個字
開頭的指令,如我們之前有用過 vi /etc/profile 與 vi /etc/bashrc,想叫出來時
只要按 vi 然後按上下鍵就可以快速的找到。
最近改用 bash 之後,最不習慣的就是沒有這樣功能,查了半天 bash manual 之後終
於發現 bash 其實有提供這個功能,只是預設並沒有配置任何按鍵給這兩個功能,(謎
之音:怕被人說抄襲嗎?)
我們可以自己在 /etc/inputrc 裡讓上下鍵對應到 history-search-backward 與
history-search-forward 這兩個指令來讓上下鍵功能跟 csh 一樣好用:

編輯 /etc/inputrc 加上下面三行:
# up key & down key = history search
"\e[A": history-search-backward
"\e[B": history-search-forward

沒有留言: