zsh 成為預設 shell
淘汰掉我的舊MBP換新後,歡天喜地開啟Terminal,感覺有點不對,提示符什麼時候變成了 %
。
查詢了一些資料發現,原來在2019年WWDC期間,蘋果推出了macOS Catalina,並且將zsh設定為作業系統預設shell。因為之前我的筆記本都是從EI Captin一路升級上來的,所以沒體會到shell的變化,最近新換了筆記本後,才發現預設shell的變化。
蘋果在其官網上,也提供瞭如何更改預設 Shell 的操作步驟。
bash
shell 俗稱殼,是用來與 kernel 核心做區分,作用是給計算機使用者提供操作介面,與計算機核心進行互動。它接收使用者命令,對命令做解析,然後呼叫系統中的應用。
shell 有很多種,這裡介紹幾個常見的shell。
第一個 Unix Shell 是1979年底在V7 Unix(AT&T第7版)中引入的,以它的資助者 Stephen Bourne 命名。Bourne shell 是一個互動式命令直譯器和命令變成語言。
Bourne Again Shell (bash)是GNU計劃的一部分,用來替代 Bourne shell。現在大多數Linux發行版都適用bash作為預設的shell。
zsh
zsh 號稱是「終極shell」,從這個稱號看出來它的功能應該很強大。zsh的歷史也很悠久,保羅·弗斯塔德(Paul Falstad)於1990年在普林斯頓大學求學時編寫了Zsh的初版。
zsh具有以下主要功能:
- 開箱即用、可程式設計的命令列補全功能可以幫助使用者輸入各種引數以及選項。
- 在使用者啟動的所有shell中共享命令歷史。這一點非常棒,曾經因為sh無法很好的解決多個視窗共享歷史命令的問題頭疼了一陣兒。
- 通過擴充套件的檔案萬用字元,可以不利用外部命令達到find命令一般展開檔名。
- 改進的變數與陣列處理。
- 在緩衝區中編輯多行命令。
- 多種相容模式,例如使用/bin/sh執行時可以偽裝成Bourne shell。
- 可以定製呈現形式的提示符;包括在螢幕右端顯示資訊,並在鍵入長命令時自動隱藏。
- 可載入的模組,提供其他各種支援:完整的TCP與Unix域套接字控制,FTP客戶端與擴充過的數學函式。
- 完全可定製化。
zsh-自動完成
% autoload -U compinit && compinit
% cp -<TAB>
-H -- follow symlinks on the command line in recursive mode
-L -- follow all symlinks in recursive mode
-P -- do not follow symlinks in recursive mode (default)
-R -- copy directories recursively
-X -- don't copy extended attributes or resource forks
-a -- archive mode, same as -RpP
-f -- force overwriting existing file
-i -- confirm before overwriting existing file
-n -- don't overwrite existing file
-p -- preserve timestamps, mode, owner, flags, ACLs, and extended attributes
-v -- show file names as they are copied
% kill <TAB>
2630 ttys000 0:00.09 -zsh
2663 ttys000 0:00.00 -zsh
由上面的例子可以看到,在開啟自動完成功能後,使用Tab鍵可以自動提示cp
命令的可選引數,也能夠自動提示出kill
命令可以殺掉的使用者程式的pid。
zsh-自動切換資料夾
shiqiang@QKing ~ % ls
Desktop Documents Downloads Library Movies Music Parallels Pictures Projects Public
shiqiang@QKing ~ % setopt auto_cd
shiqiang@QKing ~ % Projects
shiqiang@QKing Projects % pwd
/Users/shiqiang/Projects
shiqiang@QKing Projects % unsetopt auto_cd
開啟這個選項後,就可以省略cd命令來實現自動切換資料夾。
Fish Shell
在我整理資料的過程中,不斷的看到一些文章資料介紹
fish shell
並且給它打上90後
最現代
等一系列標籤來彰顯它的年輕與現代化,出於好奇我也整理試用了一下。
Fish 是 Friendly interactive shell 的簡稱,預設提供了很多shell需要配置才能有的功能,因此在易用性上有了很大的進步。它的一些功能特性總結如下:
- 預設彩色顯示
- 自動在游標後給出命令建議
- 自動補全,fish shell會根據歷史命令或者命令的可能性自動列出所有可能的選項,還能在下方提供各個命令的解釋說明問題
- fish的語法與bash差異較大,但是在可讀性上做了非常明顯的改善