命令行是程序員的必備技能。圖形界面雖然好看,解決問題還是要靠命令行。 命令行由 Shell 提供。各種命令通過 Shell,傳遞給操作系統(tǒng)的內(nèi)核。學習命令行就是在學習 Shell。 Shell 有好幾種,目前最常用是 Bash 和 zsh。但是,在我看來,它們都不如 Fish Shell 好用。 五年前,我第一次嘗試 Fish,感到很驚艷,一直用到現(xiàn)在。本文介紹 Fish 的主要特點,希望你也來嘗試它。 感謝優(yōu)達學城對本文提供贊助,結(jié)尾處有他們的課程推薦。 一、簡介Fish 是'the friendly interactive shell'的簡稱,最大特點就是方便易用。很多其他 Shell 需要配置才有的功能,F(xiàn)ish 默認提供,不需要任何配置。 如果你想擁有一個方便好用的 Shell,又不想學習一大堆語法,或者花費很多時間配置,那么你一定要嘗試一下 Fish。 二、安裝Ubuntu 和 Debian 的安裝方法。 $ sudo apt-get install fish
Mac 的安裝方法。 $ brew install fish
其他系統(tǒng)的安裝請參考官方網(wǎng)站。 三、啟動與幫助安裝完成后,就可以啟動 Fish。 $ fish
由于 Fish 的語法與 Bash 有很大差異,Bash 腳本一般不兼容。因此,我建議不要將 Fish 設為默認 Shell,而是每次手動啟動它。 使用過程中,如果需要幫助,可以輸入help 命令。瀏覽器就會自動打開,顯示在線文檔。 $ help
四、彩色顯示進入 Fish 以后,你注意到的第一件事,可能就是它默認彩色顯示。 # 無效命令為紅色$ mkd# 有效命令為藍色$ mkdir
有效路徑會有下劃線。 $ cat ~/somefi
上面代碼表示,存在以~/somefi 開頭的路徑。如果沒有下劃線,你就知道這個路徑不存在。 五、自動建議Fish 會自動在光標后面給出建議,表示可能的選項,顏色為灰色。 # 命令建議$ /bin/hostname# 參數(shù)建議$ grep --ignore-case# 路徑建議$ ls node_modules
如果采納建議,可以按下→ 或Control + F 。如果只采納一部分,可以按下Alt + → 。 六、自動補全輸入命令時,F(xiàn)ish 會自動顯示匹配的上一條歷史記錄。 $ git commit -m 'feat: first commit'
如果沒有匹配的歷史記錄,F(xiàn)ish 會猜測可能的結(jié)果,自動補全各種輸入。比如,輸入pyt 再按下Tab ,就會自動補全為python 命令。 如果有多個可能的結(jié)果,F(xiàn)ish 會把它們都列出,還帶有簡要介紹。 $ vi[按下 Tab 鍵]vi (Executable link, 2.7MB)view (Vi IMproved, 一個程序員的文本編輯器)viewer.py (Executable, 967B)viewres (Graphical class browser for Xt)...and 12 more rows
這時,再按一次tab ,就可以在這些命令之中選擇。 除了補全命令,F(xiàn)ish 還可以補全參數(shù)。比如,ls 命令的-l 參數(shù)后面按下Tab 鍵,就會顯示可以連用的其他參數(shù)。 $ ls -l[按下 Tab 鍵]-l1 (List one file per line)-lA (Show hidden except . and ..) -la (Show hidden)-lB (Ignore files ending with ~)...and 16 more rows```
Fish 還可以自動補全 Git 分支。 $ git checkout master
七、易懂的語法Fish 的語法非常自然,一眼就能看懂。 if 語句。
if grep fish /etc/shells echo Found fishelse if grep bash /etc/shells echo Found bashelse echo Got nothingend
switch 語句。
switch (uname)case Linux echo Hi Tux!case Darwin echo Hi Hexley!case FreeBSD NetBSD DragonFly echo Hi Beastie!case '*' echo Hi, stranger!end
while 循環(huán)。
while true echo 'Loop forever'end
for 循環(huán)。
for file in *.txt cp $file $file.bakend
八、函數(shù)Fish 的函數(shù)用來封裝命令,或者為現(xiàn)有的命令起別名。 function ll ls -lhG $argvend
上面代碼定義了一個ll 函數(shù)。命令行執(zhí)行這個函數(shù)以后,就可以用ll 命令替代ls -lhG 。其中,變量$argv 表示函數(shù)的參數(shù)。 下面是另一個例子。 function ls command ls -hG $argvend
上面的代碼重新定義ls 命令。注意,函數(shù)體內(nèi)的ls 之前,要加上command ,否則會因為無限循環(huán)而報錯。 九、提示符fish_prompt 函數(shù)用于定義命令行提示符(prompt)。
function fish_prompt set_color purple date '+%m/%d/%y' set_color FF0 echo (pwd) '>' set_color normalend
執(zhí)行上面的函數(shù)以后,你的命令行提示符就會變成下面這樣。 02/06/13/home/tutorial >
十、配置Fish 的配置文件是~/.config/fish/config.fish ,每次 Fish 啟動,就會自動加載這個文件。 我們可以在這個文件里面寫入各種自定義函數(shù),它們會被自動加載。比如,上面的fish_prompt 函數(shù)就可以寫在這個文件里面,這樣每次啟動 Fish,就會出現(xiàn)自定義的提示符。 Fish 還提供 Web 界面配置該文件。 $ fish_config
輸入上面的命令以后,瀏覽器就會自動打開本機的 8000 端口,用戶可以在網(wǎng)頁上對 Fish 進行配置,比如選擇提示符和配色主題。 (正文完)
下面是推廣時間。 最近,Angela Zhu 在她的公眾號發(fā)文《怎樣讓自己成為不可替代的程序員?》。 '前些日子,突發(fā)奇想,在我的小密圈里提了這樣一個問題:'未來,什么樣的程序員才是不可替代的?'' 曹政回復了一篇《當我們追求不可替代......》。 '從我的歷史來說,我一直追尋的是讓自己可替代,不論是去盡可能培養(yǎng)年輕的接班人,還是外部延聘比我更出色的技術高手。如果沒有人可以接手我的系統(tǒng),我設計的平臺,我才會覺得緊張和不安。' 這個討論涉及了很多問題。 這些問題沒有標準答案。但是,有一點是肯定的:程序員必須勇于嘗試、開拓和創(chuàng)新,在挑戰(zhàn)和失敗面前不放棄。 優(yōu)達學城幫助你形成自己的競爭力。
《機器學習(納米學位)》課程的報名本周四(5月4日)截止,主講人是大名鼎鼎的 Sebastian Thrun,他是谷歌無人駕駛汽車項目的奠基人。感興趣的朋友不要錯過,如果試聽不滿意,一周內(nèi)全額退款。
優(yōu)達學城還有一門《機器學習入門課程》,重點講授編程基礎和數(shù)學基礎(線性代數(shù)、微積分和統(tǒng)計學),適合不知道如何入門的年輕朋友。 另外,還有《無人駕駛汽車》、《人工智能》、《機器人工程師》等課程,大家也可以關注。 (完)
|