fish-shell是一个让用户惊艳的命令行shell

fish-友好的交互式shell


fish 是一款智能且用户友好的命令行 Shell,适用于 macOS、Linux 及其他操作系统。fish 包含语法高亮、输入时自动提示以及 Tab 键补全等功能,无需任何配置即可使用。

如需下载、查看屏幕截图等,请访问 https://fishshell.com/。

快速入门

fish 的工作方式与其他 shell(例如 bash 或 zsh)类似。一些重要的区别可以在
https://fishshell.com/docs/current/tutorial.html 上搜索“unlike other shells”找到。

详细的用户文档可以通过在 fish 中运行“help”获取,也可以在https://fishshell.com/docs/current/index.html 获取。

获取 fish

macOS

fish 可以安装:

  • using Homebrew: brew install fish
  • using MacPorts: sudo port install fish
  • using the installer from fishshell.com
  • as a standalone app from fishshell.com

支持的最低 macOS 版本为 10.10“Yosemite”。

Linux 软件包

Debian、Fedora、openSUSE 和 Red Hat Enterprise Linux/CentOS 的软件包可从 openSUSE Build服务 获取。

Ubuntu 的软件包可从fish PPA 获取,可使用以下命令安装:

language 复制代码
   sudo apt-add-repository ppa:fish-shell/release-4
   sudo apt update
   sudo apt install fish

Windows

  • 在 Windows 10/11 上,可以按照上面“Linux 软件包”中列出的相应发行版的说明,在 WSL Windows Subsystem for Linux 下安装 fish,也可以按照以下说明从源代码安装。
  • Fish 也可以使用 Cygwin 或 MSYS2 安装在所有版本的 Windows 上。

从源代码构建

如果您的平台没有可用的软件包,您可以从 fishshell.com 和 GitHub 上的 fish-shell 获取 GPG 签名的 tarball。请参阅“构建”部分以获取相关说明。

运行 fish

安装完成后,从当前 shell 运行 fish 即可试用!

依赖项

运行 fish 需要:

  • 一些常用的 *nix 系统实用程序(目前为 mktemp),以及基本的 POSIX 实用程序(至少需要 cat、cut、dirname、file、ls、mkdir、mkfifo、rm、sh、sort、tee、tr、uname 和 sed,但最好使用完整的核心实用程序以及 find 和 awk)。
    以下可选功能也有特定要求:
  • 带有 --help 选项或打印使用信息的内置命令需要 man 命令才能显示
  • 从手册页自动生成补全需要 Python 3.5 及以上版本
  • fish_config Web 配置工具需要 Python 3.5 及以上版本和 Web 浏览器
  • 系统剪贴板集成(使用默认的 Ctrl-V 和 Ctrl-X 绑定)需要 xsel、xclip、wl-copy/wl-paste 或 pbcopy/pbpaste 实用程序
  • yarn 和 npm 的完整补全需要 all-the-package-names NPM 模块
  • colorls(如果已安装)用于在运行时添加颜色不支持颜色的平台(例如 OpenBSD)上的 ls

构建

依赖项

编译 fish 需要:

  • Rust(1.70 或更高版本)
  • CMake(3.15 或更高版本)
  • C 编译器(用于系统特性检测和测试辅助二进制文件)
  • PCRE2(头文件和库)- 可选,如果缺少,则会下载
  • gettext(仅限 msgfmt 工具)- 可选,用于翻译支持
  • 互联网连接,因为其他依赖项将自动下载

Sphinx 也是可选的,用于从克隆的 git 仓库构建文档。
此外,运行完整的测试套件需要 Python 3.5+、tmux 和 pexpect 包。

使用 CMake 从源代码构建

与其从源代码构建,不如考虑使用适合您平台的打包版本。使用以下步骤会使 Fish 的卸载或升级变得困难。您可以从上面的链接获取发布包,并且 Fish 的最新开发版本适用于许多平台。

要安装到 /usr/local,请运行:

language 复制代码
mkdir build; cd build
cmake ..
cmake --build .
sudo cmake --install .

可以使用 cmake 的 -DCMAKE_INSTALL_PREFIX 参数更改安装目录。

CMake 构建选项

除了常规的 CMake 构建选项(例如 CMAKE_INSTALL_PREFIX)之外,fish 的 CMake 构建还提供了一些其他选项来自定义。

  • Rust_COMPILER=path - rustc 的路径。如果未设置,cmake 将检查 $PATH 和 ~/.cargo/bin。
  • Rust_CARGO=path - cargo 的路径。如果未设置,cmake 将检查 $PATH 和 ~/.cargo/bin。
  • Rust_CARGO_TARGET=target - 传递给 cargo 的目标。设置此项用于交叉编译。
  • BUILD_DOCS=ON|OFF - 是否构建文档。如果未安装 Sphinx,则自动设置为 OFF。
  • INSTALL_DOCS=ON|OFF - 是否安装文档。如果设置了 BUILD_DOCS 或预构建文档可用(例如从 tarball 构建 in-tree 时),则自动设置为 on。
  • FISH_USE_SYSTEM_PCRE2=ON|OFF - 是否使用已安装的 pcre2。通常会自动检测。
  • MAC_CODESIGN_ID=String|OFF - 在 Mac 上使用的协同设计 ID,或“OFF”表示禁用协同设计。
  • WITH_GETTEXT=ON|OFF - 是否包含翻译。
  • extra_functionsdir、extra_completionsdir 和 extra_confdir - 编译时附加一个目录,用于搜索函数、补全和配置片段。

构建嵌入数据的 Fish(实验性)

您也可以构建嵌入数据文件的 Fish。

这将包含所有数据文件,例如主 Fish 二进制文件中包含的函数或 Web 配置工具。

Fish 会直接从其自身的二进制文件中读取这些数据文件,并在需要时打印出来。某些文件,例如 Web 配置工具和手册页补全生成器,将按需提取到临时目录中。您可以使用 status list-files 列出文件,并使用 status get-file path/to/file 打印一个文件(例如,status get-file functions/fish_prompt.fish 可获取默认提示符)。

要安装嵌入文件的 Fish,只需使用 cargo 命令,例如:

language 复制代码
cargo install --path /path/to/fish # if you have a git clone
cargo install --git https://github.com/fish-shell/fish-shell --tag "$(curl -s https://api.github.com/repos/fish-shell/fish-shell/releases/latest | jq -r .tag_name)" # to build the latest release
cargo install --git https://github.com/fish-shell/fish-shell # to build the latest development snapshot

这会将二进制文件放置在 ~/.cargo/bin/ 中,但您可以将其放置在任何您想要的位置。

此构建不包含 HTML 文档(帮助将打开在线版本)。它将尝试使用 sphinx-build 构建手册页。如果该命令不可用,而您希望包含手册页,则需要安装 sphinx-build 并重新触发构建脚本,例如,通过设置 FISH_BUILD_DOCS=1

language 复制代码
FISH_BUILD_DOCS=1 cargo install --path .

将其设置为“0”将禁用手册页的包含。

要禁用翻译,请通过将 --no-default-features --features=embed-data 传递给 cargo 来禁用 localize-messages 功能。

您也可以静态链接此构建版本(但不针对 glibc),并将其移动到其他计算机。

关于项目

fish 是适用于 Linux、macOS 和其他操作系统的智能且用户友好的命令行 shell。fish 的 Tab 补全和语法高亮等功能绝对让你惊喜不已。它会让你惊叹“fish 居然能做到!”
GPL-2.0
Rust
31,182
2142
285
2012-05-10
2025-10-12

增长趋势 - stars