魚殼

魚殼用戶介紹

我一直在使用魚殼好幾個月了,我認為這是我用過的最好的外殼。因為許多的原因。

人們似乎堅持重擊這是許多系統上的默認設置(更新:現在,macOS的默認設置是Zsh)或使用Zsh,並使用了類似的強大工具哦,我的Zsh使它變得更加驚人。

Bash雖然很棒,但它是一個非常基本的外殼,帶有一組有限的可配置選項。我傾向於將其主要用於運行Bash腳本(這是另一個主題),而不是作為交互式外殼。 Zsh提供了許多功能,但需要進行一些配置才能設置,這可能會使初學者感到恐懼。另外,太多的選項和自由度意味著您很容易陷入配置癱瘓狀態,並且最終一周要更改20次選項,以確保您不會錯過任何機會。

我不想在那些項目上“撲朔迷離”,這太了不起了,我花了很多時間,有時仍然使用。這個描述是我試圖強調魚的好處的嘗試

魚殼來搶救!該外殼提供了一個令人驚嘆的環境,並且具有開箱即用的全功能配置。

Fish最喜歡的功能是:

  • 它為您已經執行的命令提供了更好的自動完成功能,僅此一項就可以使我的日常工作更快,更省力。
  • 您開始輸入命令,然後按up鍵,以查看您之前使用該命令的shell歷史記錄中的所有時間。
  • 您可以在任何系統上安裝Fish,並且Fish可以在任何地方以相同的方式工作,而不必進行過多的自定義來獲得精美的東西。

在腳本方面,它與Bash腳本(以更好的恕我直言)完全不同,但是您可以運行任何以Bash腳本為前綴的Bash腳本。#!/bin/bash

安裝完成後,您將獲得以下好處:

  • 語法高亮
  • 一個很好的提示
  • 自動補全
  • 手冊頁提示的參數建議
  • 基於Web的配置

我認為這是最適合初學者的外殼。

我記得我注意到的有趣的事情之一是主頁。起初,我不知道那是否是過去的遺物:

對於那些擁有圖形計算機的幸運兒,您可以從網頁上設置顏色並查看功能,變量和歷史記錄。

然後我意識到這是程序員的幽默,這使我發笑。科技應該總是很有趣,對不對?

首先,什麼是殼?

Shell是基礎操作系統的接口。它允許您使用文本和命令執行操作,並且為用戶提供了高級功能,例如能夠創建腳本。

安裝

通過運行安裝Fishbrew install fish在macOS上。

看看我的macOS終端指南

fish安裝在/usr/local/bin/fish

由於這很可能已經在您的路徑中,請運行fish啟動魚殼(類型exit返回到您的默認外殼)

配置

關於Fish的好處是基於Web的配置。跑fish_config啟動Web客戶端。

configuration

從這裡你可以

  • 從預定義的顏色列表中選擇一種顏色方案
  • 從預定義的提示列表中選擇提示
  • 檢查配置的Fish函數和變量
  • 查看命令歷史

配置存儲在~/.config/fish文件夾,您就可以在其中進行編輯,而不必使用(可選)基於Web的配置。

Fish功能:語法高亮顯示,自動完成和帶有手冊頁提示的參數建議

Fish使您可以執行系統上可用的常規Unix命令。文件系統操作,例如:

  • ls列出文件
  • cd更改文件夾
  • rm刪除文件或文件夾
  • mv將文件移動到另一個文件夾,或更改文件名
  • cp複製文件

如果您運行這些命令之一(或any命令,實際上),您將開始看到您鍵入的單詞具有不同的顏色。它使閱讀和理解命令變得非常容易。

魚還可以增加自動補全功能。如果你跑了cd ~/.config/fish/以前,現在您鍵入cd,Fish會提示您可能要鍵入的命令,您只需按右箭頭以接受建議(或者您可以繼續鍵入以更改命令)。此建議基於命令歷史記錄和文件路徑。

基於自動完成功能的建議也適用於命令。我在這裡輸入c並按下選項卡:

autocomplete commands

魚還建議參數以及如何使用它們。類型ls -然後按tab。您可以使用的參數及其含義的列表如下所示:

autocomplete

此內聯幫助是從手冊頁,有用的shell幫助(嘗試運行man ls以獲取完整的幫助)。

將Fish設置為默認外殼

如果您喜歡Fish並嘗試將其設置為默認外殼,請打開文件/etc/shells。我用pico進行那些小的文件編輯pico /etc/shells,但是您可以使用任何喜歡的編輯器,甚至可以將VS Code與code /etc/shells

它應包含類似於以下內容的內容:

# 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外殼:

/usr/local/bin/fish

next, run

chsh -s /usr/local/bin/fish

enter your password, and the shell will change for your user.

change shell

Plugins

You can install Fish plugins.

Fisher is a popular Fish package manager.

Install it using

curl https://git.io/fisher --create-dirs -sLo ~/.config/fish/functions/fisher.fish

and it’s available with the fisher command.

Now a package can be installed using fisher add <github-repository-path> and removed using fisher rm <github-repository-path>.

List all plugins installed using fisher ls.

Run fisher to update all the packages you installed.

Popular plugins are

Here is a list of packages you can install.

POSIX compliance

Various shells comply with the POSIX shell command standard.

POSIX means

  • Portable
  • Operating
  • System
  • Interface
  • X (for Unix)

and it’s a standard meant to unify the various Unix environment that were built over time. There is a shell command standard subset, which is meant as a way to unify how Unix shells work.

Unix is a specification/standard for a family of operating systems. Linux and macOS are based on Unix (Windows is not).

bash, ksh and others are POSIX compliant. Being POSIX compliant makes scripts written with POSIX compatibility work across POSIX compliant shells.

Fish (like sh or csh for example) is not compliant, so it’s not a POSIX shell, and this means that writing commands and scripts for Fish is different. Scripts written for Fish won’t work outside of Fish. Just like csh scripts only work on csh (and derivatives)

Why is it different? Various reasons, but I imagine having to support POSIX means the shell must adhere to a common language that might interfere with the shell philosophy and way of working. Not everyone want to have that baggage of tech to support forever.

This will very rarely be a problem with executing commands, but you need to keep it in mind when it comes to scripting and programming.

Download my free Linux Commands Handbook


More cli tutorials: