歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

終極 Shell

在開始今天的 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-zsh
cp ~/.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=vi
alias -s c=vi
alias -s java=vi
alias -s txt=vi
alias -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 的最新版本,比如:
wget https://github.com/downloads/joelthelion/autojump/autojump_v21.1.2.tar.gz
解壓縮後進入目錄,執行
./install.sh
最後把以下代碼加入.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、插件支持:請參考插件一節。
Copyright © Linux教程網 All Rights Reserved