終極 Shell-MacTalk-池建強的隨想錄

終極 Shell
Posted on 2013 年 7 月 23 日

http://macshuo.com/?p=676

zsh

在開始今天的 MacTalk 之前,先問兩個問題吧:
1、相對于其他系統,Mac 的主要優勢是什么?2、你們平時用哪種 Shell?……
第一個童靴可以坐下了,Mac 的最大優勢是 GUI 和命令行的完美結合,不要把所有注意力放在 Mac 性感的腰身和明媚的顯示屏上好吧,這不是妹紙!第二個童靴你可以出去面壁了,講了這么多期 MacTalk 你告訴我還在用 Windows 的 cmd, 你讓 Mac 君情何以堪?哪怕你就說在用 Linux 的 Bash 我也就原諒你了,踢飛!
上次在「如何學習一門編程語言」里提到了 Shell,也有讀者問到 Shell 的問題,所以這次給大家說說 Shell 的事。
我在「趣談個人建站」里介紹過一點 Shell,自己的東西借用下不丟人,把扯淡的拿掉,干貨留下,就是如下內容:
Shell是Linux/Unix的一個外殼,你理解成衣服也行。它負責外界與Linux內核的交互,接收用戶或其他應用程序的命令,然后把這些命令轉化成內核能理解的語言,傳給內核,內核是真正干活的,干完之后再把結果返回用戶或應用程序。
Linux/Unix提供了很多種Shell,為毛要這么多Shell?難道用來炒著吃么?那我問你,你同類型的衣服怎么有那么多件?花色,質地還不一樣。寫程序比買衣服復雜多了,而且程序員往往負責把復雜的事情搞簡單,簡單的事情搞復雜。牛程序員看到不爽的Shell,就會自己重新寫一套,慢慢形成了一些標準,常用的Shell有這么幾種,sh、bash、csh等,想知道你的系統有幾種shell,可以通過以下命令查看:
cat /etc/shells

顯示如下:
/bin/bash/bin/csh/bin/ksh/bin/sh/bin/tcsh/bin/zsh

在 Linux 里執行這個命令和 Mac 略有不同,你會發現 Mac 多了一個 zsh,也就是說 OS X 系統預裝了個 zsh,這是個神馬 Shell 呢?
目前常用的 Linux 系統和 OS X 系統的默認 Shell 都是 bash,但是真正強大的 Shell 是深藏不露的 zsh, 這貨絕對是馬車中的跑車,跑車中的飛行車,史稱『終極 Shell』,但是由于配置過于復雜,所以初期無人問津,很多人跑過來看看 zsh 的配置指南,什么都不說轉身就走了。直到有一天,國外有個窮極無聊的程序員開發出了一個能夠讓你快速上手的zsh項目,叫做「oh my zsh」,Github 網址是:https://github.com/robbyrussell/oh-my-zsh。這玩意就像「X天叫你學會 C++」系列,可以讓你神功速成,而且是真的。
好,下面我們看看如何安裝、配置和使用 zsh。
安裝zsh
如果你用 Mac,就可以直接看下一節如果你用 Redhat Linux,執行:sudo yum install zsh如果你用 Ubuntu Linux,執行:sudo apt-get install zsh如果你用 Windows……去洗洗睡吧。
安裝完成后設置當前用戶使用 zsh:chsh -s /bin/zsh
,根據提示輸入當前用戶的密碼就可以了。
安裝oh my zsh
首先安裝 git,安裝方式同上,把 zsh 換成 git 即可。
安裝「oh my zsh」可以自動安裝也可以手動安裝。
自動安裝:
wget https://github.com/robbyrussell/oh-my-zsh/raw/master/tools/install.sh -O - | sh

手動安裝:
git clone git://github.com/robbyrussell/oh-my-zsh.git ~/.oh-my-zshcp ~/.oh-my-zsh/templates/zshrc.zsh-template ~/.zshrc

都不復雜,安裝完成之后退出當前會話重新打開一個終端窗口,你就可以見到這個彩色的提示了:


配置
zsh 的配置主要集中在用戶當前目錄的.zshrc里,用 vim 或你喜歡的其他編輯器打開.zshrc,在最下面會發現這么一行字:

Customize to your needs…

可以在此處定義自己的環境變量和別名,當然,oh my zsh 在安裝時已經自動讀取當前的環境變量并進行了設置,你可以繼續追加其他環境變量。
接下來進行別名的設置,我自己的部分配置如下:
alias cls='clear'alias ll='ls -l'alias la='ls -a'alias vi='vim'alias javac="javac -J-Dfile.encoding=utf8"alias grep="grep --color=auto"alias -s html=mate # 在命令行直接輸入后綴為 html 的文件名,會在 TextMate 中打開alias -s rb=mate # 在命令行直接輸入 ruby 文件,會在 TextMate 中打開alias -s py=vi # 在命令行直接輸入 python 文件,會用 vim 中打開,以下類似alias -s js=vialias -s c=vialias -s java=vialias -s txt=vialias -s gz='tar -xzvf'alias -s tgz='tar -xzvf'alias -s zip='unzip'alias -s bz2='tar -xjvf'

zsh 的牛糞之處在于不僅可以設置通用別名,還能針對文件類型設置對應的打開程序,比如:
alias -s html=mate
,意思就是你在命令行輸入 hello.html,zsh會為你自動打開 TextMat 并讀取 hello.html; alias -s gz='tar -xzvf'
,表示自動解壓后綴為 gz 的壓縮包。
總之,只有想不到,木有做不到,嚇尿了吧。
設置完環境變量和別名之后,基本上就可以用了,如果你是個主題控,還可以玩玩 zsh 的主題。在 .zshrc 里找到ZSH_THEME,就可以設置主題了,默認主題是:
ZSH_THEME=”robbyrussell”
oh my zsh 提供了數十種主題,相關文件在~/.oh-my-zsh/themes目錄下,你可以隨意選擇,也可以編輯主題滿足自己的變態需求,我采用了默認主題robbyrussell,不過做了一點小小的改動:
PROMPT='%{$fg_bold[red]%}? %{$fg_bold[green]%}%p%{$fg[cyan]%}%d %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%}% %{$reset_color%}>'#PROMPT='%{$fg_bold[red]%}? %{$fg_bold[green]%}%p %{$fg[cyan]%}%c %{$fg_bold[blue]%}$(git_prompt_info)%{$fg_bold[blue]%} % %{$reset_color%}'

對照原來的版本,我把 c 改為 d,c 表示當前目錄,d 表示絕對路徑,另外在末尾增加了一個「 > 」,改完之后的效果是這樣的:


大家可以嘗試進行改造,也算個趣事。
最后我們來說說插件。
插件
oh my zsh 項目提供了完善的插件體系,相關的文件在~/.oh-my-zsh/plugins目錄下,默認提供了100多種,大家可以根據自己的實際學習和工作環境采用,想了解每個插件的功能,只要打開相關目錄下的 zsh 文件看一下就知道了。插件也是在.zshrc里配置,找到plugins關鍵字,你就可以加載自己的插件了,系統默認加載 git ,你可以在后面追加內容,如下:
plugins=(git textmate ruby autojump osx mvn gradle)

下面簡單介紹幾個:
1、git:當你處于一個 git 受控的目錄下時,Shell 會明確顯示 「git」和 branch,如上圖所示,另外對 git 很多命令進行了簡化,例如 gco=’git checkout’、gd=’git diff’、gst=’git status’、g=’git’等等,熟練使用可以大大減少 git 的命令長度,命令內容可以參考~/.oh-my-zsh/plugins/git/git.plugin.zsh

2、textmate:mr可以創建 ruby 的框架項目,tm finename 可以用 textmate 打開指定文件。
3、osx:tab 增強,quick-look filename 可以直接預覽文件,man-preview grep 可以生成 grep手冊 的pdf 版本等。
4、autojump:zsh 和 autojump 的組合形成了 zsh 下最強悍的插件,今天我們主要說說這貨。
首先安裝autojump,如果你用 Mac,可以使用 brew 安裝:
brew install autojump

如果是 Linux,去下載 autojump 的最新版本,比如:
git clone git://github.com/joelthelion/autojump.git

解壓縮后進入目錄,執行
./install.py

最后把以下代碼加入.zshrc:
[[ -s ~/.autojump/etc/profile.d/autojump.sh ]] && . ~/.autojump/etc/profile.d/autojump.sh

至此,安裝、配置、插件三位一體,終極 Shell 全面登場。退出終端會話重新登錄,開始感受 zsh 的訓疾如風!
使用 zsh
1、兼容 bash,原來使用 bash 的兄弟切換過來毫無壓力,該咋用咋用。
2、強大的歷史紀錄功能,輸入 grep 然后用上下箭頭可以翻閱你執行的所有 grep 命令。
3、智能拼寫糾正,輸入gtep mactalk * -R,系統會提示:zsh: correct ‘gtep’ to ‘grep’ [nyae]? 比妹紙貼心吧,她們向來都是讓你猜的……
4、各種補全:路徑補全、命令補全,命令參數補全,插件內容補全等等。觸發補全只需要按一下或兩下 tab 鍵,補全項可以使用 ctrl+n/p/f/b上下左右切換。比如你想殺掉 java 的進程,只需要輸入 kill java + tab鍵,如果只有一個 java 進程,zsh 會自動替換為進程的 pid,如果有多個則會出現選擇項供你選擇。ssh + 空格 + 兩個tab鍵,zsh會列出所有訪問過的主機和用戶名進行補全
5、智能跳轉,安裝了autojump之后,zsh 會自動記錄你訪問過的目錄,通過 j + 目錄名 可以直接進行目錄跳轉,而且目錄名支持模糊匹配和自動補全,例如你訪問過hadoop-1.0.0目錄,輸入j hado 即可正確跳轉。j –stat 可以看你的歷史路徑庫。
6、目錄瀏覽和跳轉:輸入 d,即可列出你在這個會話里訪問的目錄列表,輸入列表前的序號,即可直接跳轉。
7、在當前目錄下輸入 .. 或 … ,或直接輸入當前目錄名都可以跳轉,你甚至不再需要輸入 cd 命令了。
8、通配符搜索:ls -l */.sh,可以遞歸顯示當前目錄下的 shell 文件,文件少時可以代替 find,文件太多就歇菜了。
9、更強的別名:請參考配置一節。
10、插件支持:請參考插件一節。
……
看完這篇文章,你就知道,zsh一出,無人再與爭鋒!終極二字不是蓋的。
如果你是個正在使用 shell程序員,如果你依然準備使用 bash,那就去面壁和懺悔吧,別說你訂閱過 MacTalk!
感謝那位開發了 oh my zsh 的無聊程序員,他可能沒有因此收獲物質上的利益,但是他的代碼提升了無數程序員的效率,節省了大量的時間,我們說,程序員改變世界!
MacTalk 寫的多了,朋友和家人都不太理解,這玩意賺不了錢爭不了名,寫來何用?我想,能夠學習、編碼、寫作,并做出一點幫助別人的東西,總好過炒股炒房的價值吧,盡管人家比咱「富」多了……

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,882評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,208評論 3 414
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,746評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,666評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,477評論 6 407
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 54,960評論 1 321
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,047評論 3 440
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,200評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,726評論 1 333
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,617評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,807評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,327評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,049評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,425評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,674評論 1 281
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,432評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,769評論 2 372

推薦閱讀更多精彩內容