這裡禮拜看了許多Paul Irish的簡報,開頭都是講shell的重要性。
Terminal是身為程式開發人員每天都會接觸的工具,但是Mac OS X 本身內建的Terminal相當的陽春,因此也出現了許多的替代產品,像是iTerm2或是TotalTerminal。然而剛安裝好的Terminal顏色通常都是很單一的,長時間觀看下來其實相當吃力,因此透過一些顏色的區別,可以方便我們快速地區分和尋找我們要的資訊。
以我目前在使用的iTerm2來說,預設的顏色是這樣的。電腦名稱,當前目錄,以及使用者名稱的顏色完全沒有任何區別。
iTerm2本身有內建一些顏色主題(Preset),你可以從Preference->Profiles->Color,來載入或是匯出Preset。iTerm2官網上也有整理許多人設計的Color Schemes,可以找找看有沒有適合自己的色彩主題。
但是如果要設定一些比較進階的顏色顯示,就需要透過編寫bash檔的方式來設定了。
這邊我們要使用的是Paul Irish的設定,https://github.com/paulirish/dotfiles/b ... ash_prompt 。下載下來後,將.bash_prompt放在你的user目錄底下(/Users/yourname/),並將default_username改為自己的名字。
代碼: 選擇全部
# This prompt inspired by gf3, sindresorhus, alrra, and mathiasbynens.
# but customized to me. <3
default_username='yehlu'
if which thefuck > /dev/null; then
eval "$(thefuck --alias)"
fi;
# Automatically trim long paths in the prompt (requires Bash 4.x)
PROMPT_DIRTRIM=2
if [[ -n "$ZSH_VERSION" ]]; then # quit now if in zsh
return 1 2> /dev/null || exit 1;
fi;
if [[ $COLORTERM = gnome-* && $TERM = xterm ]] && infocmp gnome-256color >/dev/null 2>&1; then
export TERM=gnome-256color
elif infocmp xterm-256color >/dev/null 2>&1; then
export TERM=xterm-256color
fi
set_prompts() {
local black="" blue="" bold="" cyan="" green="" orange="" \
purple="" red="" reset="" white="" yellow=""
local dateCmd=""
if [ -x /usr/bin/tput ] && tput setaf 1 &> /dev/null; then
tput sgr0 # Reset colors
bold=$(tput bold)
reset=$(tput sgr0)
# Solarized colors
# (https://github.com/altercation/solarized/tree/master/iterm2-colors-solarized#the-values)
black=$(tput setaf 0)
blue=$(tput setaf 33)
cyan=$(tput setaf 37)
green=$(tput setaf 190)
orange=$(tput setaf 172)
purple=$(tput setaf 141)
red=$(tput setaf 124)
violet=$(tput setaf 61)
magenta=$(tput setaf 9)
white=$(tput setaf 8)
yellow=$(tput setaf 136)
else
bold=""
reset="\e[0m"
black="\e[1;30m"
blue="\e[1;34m"
cyan="\e[1;36m"
green="\e[1;32m"
orange="\e[1;33m"
purple="\e[1;35m"
red="\e[1;31m"
magenta="\e[1;31m"
violet="\e[1;35m"
white="\e[1;37m"
yellow="\e[1;33m"
fi
# Only show username/host if not default
function usernamehost() {
# Highlight the user name when logged in as root.
if [[ "${USER}" == *"root" ]]; then
userStyle="${red}";
else
userStyle="${magenta}";
fi;
userhost=""
userhost+="\[${userStyle}\]$USER "
userhost+="\[${white}\]at "
userhost+="\[${orange}\]$HOSTNAME "
userhost+="\[${white}\]in"
if [ $USER != "$default_username" ]; then echo $userhost ""; fi
}
function prompt_git() {
# this is >5x faster than mathias's.
# check if we're in a git repo. (fast)
git rev-parse --is-inside-work-tree &>/dev/null || return
# check for what branch we're on. (fast)
# if… HEAD isn’t a symbolic ref (typical branch),
# then… get a tracking remote branch or tag
# otherwise… get the short SHA for the latest commit
# lastly just give up.
branchName="$(git symbolic-ref --quiet --short HEAD 2> /dev/null || \
git describe --all --exact-match HEAD 2> /dev/null || \
git rev-parse --short HEAD 2> /dev/null || \
echo '(unknown)')";
## early exit for Chromium & Blink repo, as the dirty check takes ~5s
## also recommended (via goo.gl/wAVZLa ) : sudo sysctl kern.maxvnodes=$((512*1024))
repoUrl=$(git config --get remote.origin.url)
if grep -q chromium.googlesource.com <<<$repoUrl; then
dirty=" ⁂"
else
# check if it's dirty (slow)
# technique via github.com/git/git/blob/355d4e173/contrib/completion/git-prompt.sh#L472-L475
dirty=$(git diff --no-ext-diff --quiet --ignore-submodules --exit-code || echo -e "*")
# mathias has a few more checks some may like:
# github.com/mathiasbynens/dotfiles/blob/a8bd0d4300/.bash_prompt#L30-L43
fi
[ -n "${s}" ] && s=" [${s}]";
echo -e "${1}${branchName}${2}$dirty";
return
}
# ------------------------------------------------------------------
# | Prompt string |
# ------------------------------------------------------------------
PS1="\[\033]0;\w\007\]" # terminal title (set to the current working directory)
PS1+="\n\[$bold\]"
PS1+="\[$(usernamehost)\]" # username at host
PS1+="\[$green\]\w" # working directory
PS1+="\$(prompt_git \"$white on $purple\" \"$cyan\")" # git repository details
PS1+="\n"
PS1+="\[$reset$white\]\\$ \[$reset\]"
export PS1
# ------------------------------------------------------------------
# | Subshell prompt string |
# ------------------------------------------------------------------
export PS2="⚡ "
# ------------------------------------------------------------------
# | Debug prompt string (when using `set -x`) |
# ------------------------------------------------------------------
# When debugging a shell script via `set -x` this tricked-out prompt is used.
# The first character (+) is used and repeated for stack depth
# Then, we log the current time, filename and line number, followed by function name, followed by actual source line
# FWIW, I have spent hours attempting to get time-per-command in here, but it's not possible. ~paul
export PS4='+ \011\e[1;30m\t\011\e[1;34m${BASH_SOURCE}\e[0m:\e[1;36m${LINENO}\e[0m \011 ${FUNCNAME[0]:+\e[0;35m${FUNCNAME[0]}\e[1;30m()\e[0m:\011\011 }'
# shoutouts:
# https://github.com/dholm/dotshell/blob/master/.local/lib/sh/profile.sh is quite nice.
# zprof is also hot.
}
set_prompts
unset set_prompts
代碼: 選擇全部
# Prompt
[[ -f "$HOME/.bash_prompt" ]] && source "$HOME/.bash_prompt"
alias ls="ls -G"
不過這個設定檔除了顏色設定外,還會在每個tab上面顯示目前目錄,能讓你快速知道現在的目錄位置。另外如果這個folder是透過git來管理的,也會顯示目前所在的branch,並且用紫色的文字顯示。如果你登入的使用者和.bash_prompt中設定的不一樣,也會用顏色來提示你。
如果想更進一步了解如何修改Terminal的顯示,可以參考下面的連結
http://www.ibm.com/developerworks/linux ... ip-prompt/
http://stevelosh.com/blog/2010/02/my-ex ... hole-thing