Fish Shell
介紹 Fish Shell
我用 Fish Shell 已經好幾個月了,我認為這是我使用過的最好的 Shell。有很多原因。
大多數人似乎都使用Bash,因為它是許多系統的默認選項(更新:現在 macOS 的默認選項是 Zsh),或者使用Zsh,配合強大的工具如 Oh My Zsh 使它更加令人驚嘆。
儘管Bash很棒,但它是一個非常基本的shell,具有有限的可配置選項。我主要使用它來運行Bash腳本(這是另一個話題)而不是作為交互式shell。Zsh提供了很多功能,但需要進行一些配置才能設置,這可能會讓初學者感到害怕。同樣,過多的選項和自由意味著您可能很容易陷入配置症,每周更換20次選項以確保您不會錯過任何東西。
Fish Shell 為此而生!這款shell提供了一個令人驚嘆的環境,並且帶有全部功能的開箱即用配置。
我的最愛 Fish Shell 功能包括:
- 它能更好地自動完成已經執行的命令,只這一點就真的讓我每天工作更有效率和減壓很多。
- 您只需開始輸入命令,然後按
up
鍵,即可在shell歷史記錄中看到您以前使用該命令的所有時間。 - 您可以在任何系統上安裝 Fish,而且它在各個系統上的運作方式都相同,無需進行太多自定義以取得這些高級功能。
至於腳本編寫,Fish 與 Bash 腳本有很大不同(我認為是更好的方式),但您仍然可以運行任何 Bash 腳本,只要在前面加上 #!/bin/bash
。
在安裝之後,您將獲得以下優勢:
- 語法突出顯示
- 美觀的提示符
- 自動完成
- 參數建議,並提供 man 頁面提示
- 基於 web 的配置
我認為 Fish 是最適合初學者的 shell。
我記得有件有趣的事情是當我打開它的首頁時。一開始我搞不清楚這是否是過去的遺物:
對於幾乎沒用過文字界面的使用者,可以在網頁上設置您的顏色並查看函數、變量和歷史記錄。
然後我意識到這是程序員的幽默,這讓我發笑。科技應該始終讓人感到有趣,對吧?
首先,什麼是 shell?
Shell 是一種與底層操作系統進行交互的界面。它允許您使用文本和命令執行操作,並為用戶提供腳本創建等高級功能。
安裝
在 macOS 上運行 brew install fish
來安裝 Fish。
查看我的 macOS 终端指南
Fish Shell 安裝在 /usr/local/bin/fish
。因為這個路徑可能已經在您的系統路徑上,所以運行 fish
命令來啟動 Fish Shell(輸入 exit
返回您的默認 Shell)。
配置
Fish 的一個很好的功能是基於 web 的配置。運行 fish_config
啟動 web 客戶端。
您可以:
- 從預定義列表中選擇一種顏色方案
- 從預定義列表中選擇提示符
- 查看配置的 Fish 函數和變量
- 查看命令歷史
配置文件存儲在 ~/.config/fish
文件夾中,你可以在這裡編輯它,不需要使用(可選)的基於 web 的配置。
Fish 功能:語法突出顯示、自動完成和基於 man 頁面提示的參數建議
Fish 可以執行您系統上可用的常規 Unix 命令,例如文件系統操作:
ls
列出文件cd
切換目錄rm
刪除文件或目錄mv
移動文件到另一個目錄或更改文件名cp
複製文件
如果您執行其中一個命令(或者任何命令),您將開始看到您輸入的單詞變得不同顏色。這使得讀取和理解命令變得更加容易。
Fish 還增加了自動完成功能。如果您先前運行了 cd ~/.config/fish/
,現在輸入 cd
,Fish 會建議可能想要輸入的命令,您只需按右箭頭接受建議(或繼續輸入更改命令)。這些建議是根據命令歷史和文件路徑進行的。
基於自動完成的建議同樣適用於命令。在此例中,我輸入了 c
,並按 Tab 鍵:
Fish 還會提示參數及其用法。輸入 ls -
,然後按 tab
鍵。會顯示以下參數列表和其含義:
此內置幫助來自於 man 頁面,該幫助提供了有用的 shell 說明(試著執行 man ls
查看完整幫助)。
將 Fish 設置為默認 shell
如果您喜歡 Fish,並想將其設置為默認 shell,打開 /etc/shells
文件。我使用 pico
來進行這些小文件的編輯,使用 pico /etc/shells
,但您可以使用任何您偏好的編輯器,甚至可以使用 VS Code 的 code /etc/shells
。
它應該包含類似以下內容:
1 | # List of acceptable shells for chpass(1). |
在末尾添加以下行以添加 Fish shell:
1 | /usr/local/bin/fish |
接下來運行:
1 | chsh -s /usr/local/bin/fish |
輸入密碼,然後 shell 將更改為您的用戶。
插件
您可以安裝 Fish 插件。
Fisher 是一個熱門的 Fish 包管理器。
使用以下命令安裝 Fisher:
1 | curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish |
安裝後,您可以使用 fisher
命令來管理包。
現在,可以使用 fisher add <github-repository-path>
來安裝包,使用 fisher rm <github-repository-path>
來卸載包。
使用 fisher ls
列出所有安裝的插件。
運行 fisher
命令更新您安裝的所有包。
一些熱門的插件包括:
edc/bass
:使 Bash 內部工具在 Fish 中可用jorgebucaran/fnm
:Node.js 版本管理器
這裡 是一個您可以安裝的插件列表。
POSIX 兼容性
各種 shell 符合 POSIX shell 命令標準。
POSIX 是某些兼容的 Unix 環境的統一標準。該標準用於統一不同的 Unix 環境。它有一個 shell 命令標準的子集,旨在統一 Unix shell 的工作方式。
Unix 是一個操作系統族的規範/標準。Linux 和 macOS 是基於 Unix 的系統(Windows 不是)。
bash
、ksh
和其他一些 shell 是符合 POSIX 的。符合 POSIX 使得使用符合 POSIX 的 shell 編寫的腳本在符合 POSIX 的 shell 中運行。
Fish(如 sh
或 csh
)不符合 POSIX,因此它不是一個 POSIX shell,這意味著為 Fish 編寫的命令和腳本不會在 Fish 以外的地方運行。就像 csh
腳本只能在 csh(和其衍生版本上)運行一樣。
它之所以不同有很多原因,但我想支持 POSIX 意味著 shell 必須遵循一種可能干擾 shell 哲學和工作方式的通用語言。并不是每個人都想要長期支持這種技術的包袱。
對於執行命令,這很少會成為一個問題,但當涉及到腳本和編程時,您需要時刻納入這一點。