fishshell的入门教程

959 阅读6分钟

我已经使用鱼壳几个月了,我认为这是我用过的最好的壳。有很多原因。

人们似乎坚持使用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 来启动网络客户端。

configuration

从这里你可以

  • 从预定义的颜色列表中选择一个颜色方案
  • 从预定义的列表中选择一个提示符
  • 检查配置的Fish功能和变量
  • 查看命令历史

配置存储在~/.config/fish 文件夹中,在这里你可以编辑它,而不需要使用基于网络的配置(可选)。

Fish的特点:语法高亮、自动完成和参数建议与手册页提示

Fish可以让您执行您的系统上常用的Unix命令。文件系统操作,例如。

  • ls 列出文件
  • cd 改变文件夹
  • rm 删除一个文件或文件夹
  • mv 移动一个文件到另一个文件夹,或改变一个文件名
  • cp 复制一个文件

如果你运行其中一个命令(或any 命令,真的),你将开始看到你输入的字变成不同的颜色。这使得它真的很容易阅读和理解命令。

Fish还增加了自动完成功能。如果你以前运行cd ~/.config/fish/ ,现在你输入cd ,Fish会建议你可能要输入的命令,你只需按下右键接受建议(或者你可以继续输入来改变命令)。这个建议是基于命令历史和文件路径的。

基于自动完成的建议也适用于命令。这里我输入了c ,然后按了tab键。

autocomplete commands

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

autocomplete

这个内联帮助是由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就会为你的用户改变。

change 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 来更新所有你安装的软件包。

流行的插件有

下面是你可以安装的软件包的列表。

符合POSIX标准

各种shell都符合POSIX shell命令标准。

POSIX意味着

  • 便携的
  • 操作系统
  • 系统
  • 接口
  • X(用于Unix)。

它是一个标准,旨在统一随着时间推移建立的各种Unix环境。有一个shell命令标准子集,其目的是为了统一Unix shell的工作方式。

Unix是一个操作系统系列的规范/标准。Linux和macOS是基于Unix的(Windows不是)。

bash,ksh 和其他系统都符合POSIX标准。符合POSIX标准使得用POSIX兼容性编写的脚本可以在符合POSIX标准的外壳上工作。

Fish(比如说shcsh )不兼容,所以它不是一个POSIX shell,这意味着为Fish编写命令和脚本是不同的。为Fish编写的脚本在Fish以外的地方不能工作。就像csh 脚本只在csh(和衍生品)上工作一样

为什么会有不同呢?各种各样的原因,但我想必须支持POSIX意味着shell必须遵守一种通用的语言,这可能会干扰shell的理念和工作方式。不是每个人都想永远支持这种技术的包袱。

这在执行命令时很少会有问题,但当涉及到脚本和编程时,你需要把它记在心里。