我已经使用鱼壳几个月了,我认为这是我用过的最好的壳。有很多原因。
人们似乎坚持使用Bash,这是许多系统的默认设置(更新:现在macOS的默认设置是Zsh),或者使用Zsh,用Oh My Zsh这样的好工具来使它更加神奇。
Bash虽然很棒,但它是一个非常基本的shell,可配置的选项有限。我倾向于用它来运行Bash脚本(这是另一个话题),而不是作为一个交互式的shell。 Zsh提供了很多功能,但需要一点点的配置来设置,这可能会吓到初学者。另外,太多的选项和自由度意味着你很容易陷入配置瘫痪,最终你会在一周内改变20次选项,以确保你没有遗漏。
我不想 "抨击 "这些项目,它们很了不起,我用了很多时间,有时还在用。这个描述是我试图强调鱼的好处
鱼壳拯救了我们!这个外壳提供了一个惊人的环境,以及开箱即用的全功能配置。
我最喜欢的Fish的特点是。
- 它对你已经执行的命令有更好的自动完成功能,仅这一点就使我每天的工作更快,压力更小。
- 你开始输入一个命令并按下
up键,就可以看到你在shell历史上使用过的所有命令。 - 你可以在任何系统上安装Fish,它在任何地方的工作方式都是一样的,不必为获得花哨的东西而进行过多的定制。
当涉及到脚本时,它与Bash脚本有相当大的不同(以更好的方式IMHO),但你可以运行任何Bash脚本,只要其前缀为#!/bin/bash 。
在安装之后,你就会得到那些好东西。
- 语法高亮
- 一个漂亮的提示
- 自动补全
- 带有man page提示的参数建议
- 基于网络的配置
在我看来是最适合初学者的shell。
我记得我注意到的一个有趣的事情是主页。起初我不明白这是否是某种来自过去的遗迹。
对于那些拥有图形计算机的幸运儿来说,你可以在一个网页上设置你的颜色和查看函数、变量和历史。
然后我意识到这是程序员的幽默,它让我笑了起来。技术总是应该是有趣的,对吗?
第一件事:什么是shell?
shell是一个通往底层操作系统的接口。它允许你使用文本和命令来执行操作,并为用户提供高级功能,如能够创建脚本。
安装
通过在macOS上运行brew install fish 来安装Fish。
请看我的macOS终端指南
fish 在 。/usr/local/bin/fish
因为这可能已经在你的路径中了,运行fish 来启动Fish shell(输入exit 来返回你的默认shell)。
配置
Fish的一个好处是基于网络的配置。运行fish_config 来启动网络客户端。

从这里你可以
- 从预定义的颜色列表中选择一个颜色方案
- 从预定义的列表中选择一个提示符
- 检查配置的Fish功能和变量
- 查看命令历史
配置存储在~/.config/fish 文件夹中,在这里你可以编辑它,而不需要使用基于网络的配置(可选)。
Fish的特点:语法高亮、自动完成和参数建议与手册页提示
Fish可以让您执行您的系统上常用的Unix命令。文件系统操作,例如。
ls列出文件cd改变文件夹rm删除一个文件或文件夹mv移动一个文件到另一个文件夹,或改变一个文件名cp复制一个文件
如果你运行其中一个命令(或any 命令,真的),你将开始看到你输入的字变成不同的颜色。这使得它真的很容易阅读和理解命令。
Fish还增加了自动完成功能。如果你以前运行cd ~/.config/fish/ ,现在你输入cd ,Fish会建议你可能要输入的命令,你只需按下右键接受建议(或者你可以继续输入来改变命令)。这个建议是基于命令历史和文件路径的。
基于自动完成的建议也适用于命令。这里我输入了c ,然后按了tab键。

Fish还建议参数和如何使用它们。输入ls - ,然后按tab 。你可以使用的参数列表和它们的含义就在下面显示。

这个内联帮助是由man pages生成的,是有用的shell帮助(尝试运行man ls ,获得完整的帮助)。
将Fish设置为默认的shell
如果你喜欢Fish,并想把它作为你的默认shell,请打开文件/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 shell。
/usr/local/bin/fish
下一步,运行
chsh -s /usr/local/bin/fish
输入你的密码,shell就会为你的用户改变。

插件
你可以安装Fish插件。
Fisher是一个流行的Fish软件包管理器。
安装它的方法是
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工具可以在鱼中使用jorgebucaran/fnmNode.js版本管理器
下面是你可以安装的软件包的列表。
符合POSIX标准
各种shell都符合POSIX shell命令标准。
POSIX意味着
- 便携的
- 操作系统
- 系统
- 接口
- X(用于Unix)。
它是一个标准,旨在统一随着时间推移建立的各种Unix环境。有一个shell命令标准子集,其目的是为了统一Unix shell的工作方式。
Unix是一个操作系统系列的规范/标准。Linux和macOS是基于Unix的(Windows不是)。
bash,ksh 和其他系统都符合POSIX标准。符合POSIX标准使得用POSIX兼容性编写的脚本可以在符合POSIX标准的外壳上工作。
Fish(比如说sh 或csh )不兼容,所以它不是一个POSIX shell,这意味着为Fish编写命令和脚本是不同的。为Fish编写的脚本在Fish以外的地方不能工作。就像csh 脚本只在csh(和衍生品)上工作一样
为什么会有不同呢?各种各样的原因,但我想必须支持POSIX意味着shell必须遵守一种通用的语言,这可能会干扰shell的理念和工作方式。不是每个人都想永远支持这种技术的包袱。
这在执行命令时很少会有问题,但当涉及到脚本和编程时,你需要把它记在心里。