首页
/ Starship 跨 Shell Prompt 安装与集成完全指南:从二进制下载到提示符生效

Starship 跨 Shell Prompt 安装与集成完全指南:从二进制下载到提示符生效

2026-09-07 18:47:40作者:廉彬冶Miranda

Starship 是一个用 Rust 编写、面向任意 shell 的极简且高度可定制的命令行提示符(prompt),目标是"最小、极速、无限可定制"。本文以仓库印尼语文档首页 docs/id-ID/README.md 为主线,系统讲解安装前置条件、三种主流安装方式(官方脚本 / Homebrew / Winget)以及 Bash、Fish、Zsh、PowerShell 等十种 shell 的接入方法,并结合仓库中的安装脚本与 init 源码解释其底层工作方式。读完本文,你将能够在自己的机器上完成从"下载二进制"到"提示符在每个新终端中生效"的完整闭环。

一、Starship 是什么:三句话理解核心设计

文档首页开宗明义地给出 Starship 的定位:"Prompt yang minimal, super cepat, dan dapat disesuaikan tanpa batas untuk shell apa pun!"(为任何 shell 打造的极简、超快、无限可定制的提示符)。首页的 feature 三栏进一步点明了它的三大设计支柱:

  1. Kompatibilitas Yang Utama(兼容性优先):可在各类标准 shell 与主流操作系统上工作,"到哪里都能用"。Starship 支持十种 shell(bash、elvish、fish、ion、powershell、tcsh、zsh、nu、xonsh、cmd),这一点可从 src/init/mod.rs 中不支持 shell 的报错清单直接得到源码印证。
  2. Dibuat dengan Rust(用 Rust 构建):借助 Rust 的速度与安全性,让提示符既快又可靠。仓库根目录 Cargo.toml 以 Rust 工程形式承载了整个二进制实现。
  3. Dapat Dikustomisasi(可定制):每个细节都可按你的喜好调整——既可以做成极简单行,也可以做成信息丰富的功能型提示符。

它只在终端需要绘制提示符时展示「当时需要的信息」(Git 分支、目录、语言版本、命令耗时等),保持界面简洁而信息不缺位,这就是"minimal namun kaya informasi"(简约却信息十足)的含义。

二、安装前置条件:Nerd Font

文档在正式开始前只列出了一项硬性前置要求:

终端中需要安装并启用 Nerd Font 字体。

Starship 内置模块大量使用 Nerd Font 字形(如各语言的 logo 图标、Git 分支符号等),缺少该字体会导致图标显示为方框或乱码。仓库根目录还内置了可直接加载的字体文件 public/nerd-font.woff2,同时 docs/presets/nerd-font.md 对相关字形/图标预设做了专门说明。若你不需要任何图标字形,可参考预设文档 docs/presets/no-nerd-font.mddocs/presets/no-empty-icons.md

三、第一步:把 starship 二进制装到机器上

安装分两步走:先把 starship 二进制放入系统,再让 shell 启动时加载它。文档提供了三种二进制获取方式。

3.1 官方脚本安装(推荐,支持后续升级)

在 Shell 中执行:

curl -sS https://starship.rs/install.sh | sh

该命令从 starship.rs 拉取官方安装脚本并立即执行。文档特别强调:

更新 Starship:再次运行上面这行脚本即可。它会原地更新已安装版本,不会改动你的 Starship 配置(配置独立存放,见第四节)。

仓库 install/install.sh 就是该脚本的同源实现(官网托管的是发布版副本),脚本注释与默认值解释了它的行为细节:

  • 支持目标平台与架构:脚本第 16–22 行声明了支持矩阵(x86_64-unknown-linux-gnuaarch64-unknown-linux-muslx86_64-apple-darwinx86_64-pc-windows-msvc 等),并通过 detect_platform() / detect_arch()install/install.sh)用 uname 自动探测当前系统,Linux 下默认选用静态链接的 musl 构建以避免动态链接问题,Git Bash / Cygwin 等 Windows 环境则自动归入 pc-windows-msvc
  • 默认安装目录/usr/local/bininstall/install.sh)。若该目录不可写,脚本会尝试通过 sudo 提权(Windows 下则提示以管理员身份运行)。
  • 可用参数:脚本自述(usageinstall/install.sh)支持的常用选项包括:
参数 作用 默认值
-p, --platform <P> 覆盖自动探测的平台 自动探测
-a, --arch <A> 覆盖自动探测的架构 自动探测
-b, --bin-dir <DIR> 指定二进制安装目录 /usr/local/bin
-v, --version <V> 安装指定版本(形如 v1.2.3 latest
-f, -y, --force, --yes 跳过安装确认提示 需手动确认
-V, --verbose 输出详细安装日志 关闭
  • 下载通道:脚本优先使用 curl,其次 wget,再次 fetch;若 curl 是通过 snap 安装的会主动告警并另寻下载工具(install/install.sh)。

3.2 通过包管理器安装

文档给出了两个官方示例:

macOS 场景使用 Homebrew(Linux 下对应 Linuxbrew):

brew install starship

Windows 场景使用 Winget

winget install starship

除此之外,仓库内还为其他平台维护了分发配置,可作为参考:Windows 的 Chocolatey 配方位于 install/windows/choco,MSI 打包源位于 install/windows/main.wxs;macOS 的 pkg 打包与公证脚本位于 install/macos_packages。社区整理的更多平台安装方式(Termux、Nix、Funtoo、Chocolatey 等)收录在安装进阶文档 docs/installing/README.md 中。

四、第二步:让 shell 加载 Starship——十种 shell 逐一接入

拿到二进制后,还需要把一段初始化语句加入各 shell 的启动配置文件,让每次打开终端时提示符都由 Starship 接管。以下配置代码均来自文档原文,可直接复制使用。

4.1 Bash

把下面两行追加到 ~/.bashrc 文件末尾

# ~/.bashrc

eval "$(starship init bash)"

4.2 Fish

把下面两行追加到 ~/.config/fish/config.fish 文件末尾

# ~/.config/fish/config.fish

starship init fish | source

4.3 Zsh

把下面两行追加到 ~/.zshrc 文件末尾

# ~/.zshrc

eval "$(starship init zsh)"

4.4 PowerShell

将下面内容追加到 Microsoft.PowerShell_profile.ps1 文件末尾。可以用 PowerShell 中的 $PROFILE 变量查询该文件的位置,通常路径为 ~\Documents\PowerShell\Microsoft.PowerShell_profile.ps1,在 *-Nix 上则为 ~/.config/powershell/Microsoft.PowerShell_profile.ps1

Invoke-Expression (&starship init powershell)

4.5 Ion

把下面两行追加到 ~/.config/ion/initrc 文件末尾

# ~/.config/ion/initrc

eval $(starship init ion)

4.6 Elvish

注意:仅支持 elvish v0.18 及以上版本

将以下内容追加到 ~/.config/elvish/rc.elv(Windows 上为 %AppData%\elvish\rc.elv):

# ~/.elvish/rc.elv

eval (starship init elvish)

对于 elvish v0.21.0 之前的版本,配置文件可能位于 ~/.elvish/rc.elv

4.7 Tcsh

把下面两行追加到 ~/.tcshrc 文件末尾

# ~/.tcshrc

eval `starship init tcsh`

4.8 Nushell

注意:目前仅支持 Nushell v0.96 及以上版本,且该接入方式未来可能发生变化。

在 Nushell 中运行 $nu.config-path 可找到配置文件位置。将以下命令粘贴到 Nushell 配置中执行,把生成的 starship.nu 写入自动加载目录:

mkdir ($nu.data-dir | path join "vendor/autoload")
starship init nu | save -f ($nu.data-dir | path join "vendor/autoload/starship.nu")

4.9 Xonsh

把下面两行追加到 ~/.xonshrc 文件末尾

# ~/.xonshrc

execx($(starship init xonsh))

4.10 Cmd(Windows)

Cmd 本身不具备直接钩子的能力,需要搭配 Clink(v1.2.30+)使用。创建一个名为 starship.lua 的文件,放入 Clink 的脚本目录(默认路径如 %LocalAppData%\clink\):

-- starship.lua

load(io.popen('starship init cmd'):read("*a"))()

4.11 各 Shell 配置速查表

Shell 配置文件 需要写入的初始化命令
Bash ~/.bashrc eval "$(starship init bash)"
Fish ~/.config/fish/config.fish starship init fish | source
Zsh ~/.zshrc eval "$(starship init zsh)"
PowerShell $PROFILE 查询 Invoke-Expression (&starship init powershell)
Ion ~/.config/ion/initrc eval $(starship init ion)
Elvish (v0.18+) ~/.config/elvish/rc.elv eval (starship init elvish)
Tcsh ~/.tcshrc eval `starship init tcsh`
Nushell (v0.96+) $nu.config-path 查询 写入 vendor/autoload/starship.nu
Xonsh ~/.xonshrc execx($(starship init xonsh))
Cmd Clink 脚本目录下 starship.lua Lua 的 load(io.popen(...))

五、init 命令背后的两阶段设计

starship init <shell> 看似简单,内部其实是一个精心设计的两阶段(two-phase)初始化过程,见 src/init/mod.rs 的注释与实现:

  • 第一阶段(stub)starship init <shell> 输出的是一小段"引导代码"(由 init_stub 打印,src/init/mod.rs),它负责定位 starship 二进制的完整路径,再调用真正的初始化脚本。
  • 第二阶段(full init):stub 内部会请求 starship init <shell> --print-full-init(对应 CLI 定义见 src/main.rs,分发逻辑见 src/main.rs),init_main 再将随二进制打包的完整初始化脚本输出给 shell 执行。例如 Bash 的 stub 实际展开为 eval -- "$(starship init bash --print-full-init)"src/init/mod.rs)。

之所以不直接在配置文件里写完整脚本,是为了规避两个现实问题(src/init/mod.rs 有完整历史背景):一是老版本 Bash(如 macOS 默认的 3.2)不支持进程替换式 source <(...),二是若把长脚本用 eval 一次性压成单行求值,脚本里的注释会"吞掉"后续所有内容。因此改为「stub 短小、主脚本完整」两段式,既兼容老版本,也便于维护与调试。

各 shell 的主初始化脚本以 include_str! 方式内嵌进二进制,对应的仓库源文件为 src/init/starship.bashsrc/init/starship.zshsrc/init/starship.fishsrc/init/starship.ps1src/init/starship.ionsrc/init/starship.elvsrc/init/starship.tcshsrc/init/starship.nusrc/init/starship.xshsrc/init/starship.lua(Cmd),映射关系见 src/init/mod.rs。从源码可见不同 shell 的引导策略差异:Bash/Zsh 走 POSIX 路径转义 + eval,Fish 用 psub 进程替换,PowerShell 用 Out-String 防换行截断,Elvish 用 e: 前缀强制可执行路径解析等(src/init/mod.rs),各有针对性测试覆盖,例如对含空格、含单引号路径的转义测试(src/init/mod.rs)。

六、安装后的下一步

按上述步骤重启终端或重新 source 配置文件后,新的提示符即应生效。接下来可按需深入:

如果需要查阅完整安装流程的英文原文,可对照仓库根级指南 docs/guide/README.md(其印尼语版位于 docs/id-ID/guide/README.md)。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
kernelkernel
deepin linux kernel
C
33
18
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.13 K
2.75 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
857
1.35 K
docsdocs
暂无描述
Markdown
897
5.8 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
529
593
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
916
1.83 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.58 K
1.01 K
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.35 K
1.46 K
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
1.01 K
515
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
547
388