/

Fish Shell

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 Codecode /etc/shells

它應該包含類似以下內容:

1
2
3
4
5
6
7
8
9
10
# List of acceptable shells for chpass(1).
# Ftpd will not allow users to connect who are not using
# one of these shells.

/bin/bash
/bin/csh
/bin/ksh
/bin/sh
/bin/tcsh
/bin/zsh

在末尾添加以下行以添加 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 命令更新您安裝的所有包。

一些熱門的插件包括:

這裡 是一個您可以安裝的插件列表。

POSIX 兼容性

各種 shell 符合 POSIX shell 命令標準。

POSIX 是某些兼容的 Unix 環境的統一標準。該標準用於統一不同的 Unix 環境。它有一個 shell 命令標準的子集,旨在統一 Unix shell 的工作方式。

Unix 是一個操作系統族的規範/標準。Linux 和 macOS 是基於 Unix 的系統(Windows 不是)。

bashksh 和其他一些 shell 是符合 POSIX 的。符合 POSIX 使得使用符合 POSIX 的 shell 編寫的腳本在符合 POSIX 的 shell 中運行。

Fish(如 shcsh)不符合 POSIX,因此它不是一個 POSIX shell,這意味著為 Fish 編寫的命令和腳本不會在 Fish 以外的地方運行。就像 csh 腳本只能在 csh(和其衍生版本上)運行一樣。

它之所以不同有很多原因,但我想支持 POSIX 意味著 shell 必須遵循一種可能干擾 shell 哲學和工作方式的通用語言。并不是每個人都想要長期支持這種技術的包袱。

對於執行命令,這很少會成為一個問題,但當涉及到腳本和編程時,您需要時刻納入這一點。