一个为90后设计的Shell,早知道,当年学Shell也不至于那么痛苦了,Star 25K+!
Linux有很多解析器(Shell),Bash是默认安装也是用途最广的Shell之一。但是作为一个运维小白(比如N年前刚入运维坑的我),刚开始学习Shell的时候简直头大。什么 awk, sed,脑子根本记不住,用了小本子也记不住,shell脚本也是边学边忘边“某度”。总之,当年的《鸟哥私房菜》,啃了两遍,最终结果就是翻页查找特快(也有可能我不够聪明)!

当时就在想为什么Bash不设计的更简单易用、易学点呢。比如语法高亮、边输入边自动建议这些功能都加上。所以,今天大家推荐的是一个除了Linux系统可以用,Windows、MacOS也可以用的,智能和用户友好的解释器-fish-shell
01 — fish-shell 介绍
Finally, a command line shell for the 90s
一个现代、用户友好的命令行界面,以其智能特性、语法高亮、实时自动建议、花式标签补全、直观的历史搜索和跨平台支持而著称。它提供了一个美观、易用且功能丰富的Shell环境,旨在简化Shell命令行操作,提高用户的工作效率。号称一个为90后设计的 Shell,本质也是项目的一种调侃,强调Fish-shell提供了一种新颖的、现代的命令行体验。
🏠 项目信息
#github地址: https://github.com/fish-shell/fish-shell
#项目地址: https://fishshell.com/fish-shell已经发展10年了,项目还是处于非常活跃更新中。


🚀功能特性
- 智能命令补全:无需额外配置,自动补全命令、参数、文件名等,提高输入效率。
- 语法高亮:自动对命令行输入进行语法高亮,增强可读性。
- 自动建议:实时提供命令和路径建议,预测用户输入。
- 历史搜索:改进的历史搜索功能,快速检索命令历史。
- 跨平台支持:支持 macOS、Linux、BSD 以及 Windows(通过 WSL 或 Cygwin)。
- 脚本友好:简化的语法结构、直观的错误提示、强大的内置函数库以及对现代编程语言特性的支持。
- 安全性:包括自动路径展开等安全特性,防止路径注入攻击。
- 美观界面:提供多种主题和颜色方案,界面美观。
- 插件系统:可以轻松地添加如命令别名、主题美化、命令行增强、文件管理优化等多种类型的插件。插件通常以脚本或配置文件的形式存在,易于安装和管理,极大地扩展了 Fish 的原生功能。
🛠 和Bash shell的对比
| 特性 | Fish-shell | Bash shell |
| 用户界面 | 现代、美观,自动语法高亮和命令补全 | 需要额外配置才能实现语法高亮和命令补全 |
| 自动建议 | 边输入边提供智能建议 | 需要安装和配置如 bash-completion 等插件 |
| 命令补全 | 强大的自动补全功能,支持命令、参数、文件名等 | 基本补全功能,其他需要额外配置 |
| 历史搜索 | 改进的历史搜索功能,支持上下箭头键快速搜索 | 基本历史搜索 |
| 多平台 | 原生支持 macOS、Linux、BSD 和 Windows (WSL 或 Cygwin) | 主要用于 Linux 和 macOS |
| 可定制性 | 通过配置文件和主题进行高度定制 | 通过 .bashrc、.bash_profile 等文件进行定制 |
| 脚本编写 | 简化的语法结构,易于编写和维护脚本 | 强大的脚本编写能力,但语法复杂度较高 |
| 插件系统 | 支持通过 Fisherman 或 Oh My Fish 等插件管理器安装和管理插件 | 需要手动安装和管理插件,或使用如 bash-it 的框架 |
| 集成开发环境 | 与许多 IDE 和编辑器集成,提供语法高亮和代码补全支持 | 需要额外配置或插件才能实现集成开发环境支持 |
| 学习成本 | 较低,用户界面友好,自动建议和补全减少学习时间,但是材料相对bash较少 | 较高,需要学习大量命令和脚本语法,额外配置增加学习曲线 |
| 社区情况 | 活跃社区,提供丰富的插件和主题,但是社区群体相对Bash较小 | 庞大的社区,大量资源和文档,使用广范 |
02— fish-shell 安装
fish-shell支持多种操作系统安装,常用的操作系统基本都支持。

在大多数 Linux 发行版中,可以使用软件包管理器来安装fish-shell
# 在 Ubuntu 上安装fish-shell
sudo apt-get install fish
# Fedora 和其他基于 RPM 的发行版Linux
sudo dnf install fish03— fish-shell 使用
安装完成,只需输入fish,即可进入fish shell 环境。

fish-shell 提供了许多有用的功能,以下是一些具体的用法示例:
1. 自动补全:
如果正在输入一个命令,fish 会提供自动补全的建议

2. 命令历史:
使用上下箭头键浏览命令历史,使用 Alt+↑ 跳转到历史中上一个使用相同前缀的命令。
3. 自动建议:
边输入边自动建议,比如在输入 cd 命令后,fish 会建议可能的目录

4. 语法高亮:
执行命令时,fish 会高亮显示命令的不同部分,比如 echo "Hello, OSM!"

5. 命令搜索:
使用 Ctrl+R 进入搜索模式,搜索历史命令

6. 变量使用:
# 设置变量
set my_var "Hello, OSM!"
# 使用变量
echo $my_var
7.函数定义:
# 定义一个函数
function greet
echo "Hello, $argv[1]!"
end
# 调用函数
greet "OSM"

04— fish-shell 插件
1.安装插件管理器:
推荐使用fisher插件管理器来简化fish插件的安装和管理。
curl -sL https://raw.githubusercontent.com/jorgebucaran/fisher/main/functions/fisher.fish | source && fisher install jorgebucaran/fisher2.安装插件
要安装插件,使用install命令,并将其指向 GitHub 存储库。
fisher install jorgebucaran/nvm.fish3.列出插件
使用list命令查看所有已安装的插件。
$ fisher list
jorgebucaran/fisher
ilancosman/tide@v5
jorgebucaran/nvm.fish
/home/jb/path/to/plugin4.更新插件
fisher update jorgebucaran/fisher5.删除插件
fisher remove jorgebucaran/nvm.fish 综上所述,通过fish-shell,可以有效的降低用户对命令行 shell 的学习成本,提高运维老手的工作效率。如果你也感兴趣的话,不妨试试吧!