news 2026/10/15 16:01:59

oh-my-bash powerbash10k 主题完全指南:Nerd Fonts 前提、`pb10k` 命令与三段式多彩提示符配置

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
oh-my-bash powerbash10k 主题完全指南:Nerd Fonts 前提、`pb10k` 命令与三段式多彩提示符配置
  • 开发工具
  • CLI

【免费下载链接】oh-my-bash

A delightful community-driven framework for managing your bash configuration, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.

项目地址:https://gitcode.com/gh_mirrors/oh/oh-my-bash
点击查看免费下载

powerbash10k 是 oh-my-bash 内置的一款多彩终端提示符主题,设计灵感来自 zsh 生态的 powerlevel10k,代码则基于 oh-my-bash 的 Brainy 主题重构而来。本文将以 themes/powerbash10k/README.md 为核心骨架,结合 powerbash10k.theme.sh 源码逐段解析其工作原理,覆盖主题启用、Nerd Fonts 前置条件、pb10k动态开关命令、全部主题环境变量以及提示符段落的重排方法,读完即可按需定制出自己的 powerbash10k 提示符。

主题定位与设计来源

官方 README 对 powerbash10k 的定位是一句话:

Simple colorful terminal prompt theme (inspired by powerlevel10k zsh theme, based on Brainy theme).

它继承了 powerlevel10k 的"分段式"提示符设计思路(信息分区块、可独立开关),实现上则源自 oh-my-bash 的 Brainy 主题。主题文件头部的注释也印证了这一点:

# powerbash10k theme for oh-my-bash, inspired by powerlevel10k zsh theme # made by awerebea, based on brainy theme by MunifTanjim

与 Brainy 相比,powerbash10k 做了两处显著升级:

  1. 引入了cmd_duration段:显示上一条命令的执行耗时(Brainy 没有此段)。
  2. 默认启用了 SSH/本地会话区分:通过__PB10K_PROMPT_LOCAL_USER_INFO变量控制本地会话是否显示用户信息。
  3. 布局从"单行"扩展为"三段式":支持顶左(__PB10K_TOP_LEFT)、顶右(__PB10K_TOP_RIGHT)、底部(__PB10K_BOTTOM)三个区域的独立编排。

前置条件:Nerd Fonts

powerbash10k 的提示符大量使用 Nerd Fonts 图标(例如目录段前的、Git 分支前的、时钟前的、耗时前的、Python 前的等)。因此 README 明确列出唯一前置条件:

  • 安装一款Nerd Font(如 Meslo Nerd Font、FiraCode Nerd Font 等),并在你的终端模拟器中配置该字体。

若终端字体不是 Nerd Font,这些图标将显示为乱码或缺字,提示符的美观性会大打折扣(功能本身不受影响)。

功能特性总览

提示符段落(Prompt Segments)

README 列出的核心段落包括:

段落展示内容
user_info用户名与主机名(Username & Hostname)
dir当前工作目录(Current Directory)
scm源码管理仓库状态(SCM Information,如 Git)
battery电池电量(Battery Charge)
clock当前时间(Clock)
cmd_duration上一条命令的执行时长(Command duration)
todoTodo.txt 任务状态
rubyRuby 环境信息
pythonPython 环境信息
exitcode上一条命令的退出码(Exit Code)
char提示符字符(如❯)

其他特性(Others)

  • 缓存 sudo 凭据指示器:检测到当前 shell 已缓存 sudo 凭据时,用户信息段会改变颜色。
  • SSH 登录指示器:SSH 会话中强制显示用户信息,本地会话可通过变量隐藏。
  • pb10k命令:用于即时显示/隐藏各个提示符段落,无需编辑配置文件。

快速启用 powerbash10k

启用主题只需在~/.bashrc中设置OSH_THEME,这一点在 templates/bashrc.osh-template 中有明确示例:

# Set name of the theme to load. OSH_THEME="powerbash10k"

如果你使用随机主题模式(OSH_THEME="random"),还可以在~/.bashrc中排除不喜欢的主题,或指定候选列表,模板中已给出包含 powerbash10k 的示例:

# If you set OSH_THEME to "random", you can ignore themes you don't like. OMB_THEME_RANDOM_IGNORED=("powerbash10k" "wanelo") # You can also specify the list from which a theme is randomly selected: OMB_THEME_RANDOM_CANDIDATES=("font" "powerline-light" "minimal")

随机主题机制的实现位于 themes/random/random.theme.bash:当OMB_THEME_RANDOM_CANDIDATES已设置时直接以它为候选池,否则扫描全部主题目录并排除random自身及OMB_THEME_RANDOM_IGNORED中列出的主题,最后用RANDOM % ${#_omb_init_themes[@]}挑选一个加载。

三段式提示符的布局原理

powerbash10k 的提示符由三个区域组成(README 的 "Prompt Segments Order" 一节),默认编排如下:

__PB10K_TOP_LEFT="dir scm" __PB10K_TOP_RIGHT="exitcode cmd_duration user_info python ruby todo clock battery" __PB10K_BOTTOM="char"

即:

  • 顶行左侧:目录 + SCM 状态;
  • 顶行右侧:退出码、命令耗时、用户信息、Python、Ruby、Todo、时钟、电池;
  • 底行:提示符字符❯。

实现上,__pb10k_top 函数 先按__PB10K_TOP_LEFT顺序渲染左侧段,再计算终端宽度(tput cols),用黑色·字符把该行填充到终端右缘,随后通过 ANSI 转义序列\033[${terminal_width}G\033[1K\033[1A回到行首并上移一行;接着渲染__PB10K_TOP_RIGHT的右侧各段,用\033[${__TOP_RIGHT_LEN}D光标控制把右段"贴"到最右端——这正是截图里"左目录、右状态"并存的实现细节。__pb10k_bottom 函数 则简单地在换行后输出__PB10K_BOTTOM各段。

最终的 PS1 由 __pb10k_ps1 组合top与bottom,PS2 次提示符使用__PB10K_PROMPT_CHAR_PS2(默认\):

function __pb10k_ps1 { printf "%s%s%s" "$(__pb10k_top)" "$(__pb10k_bottom)" "$_omb_prompt_normal" } function __pb10k_ps2 { local color color=$_omb_prompt_bold_white printf "%s%s%s" "$color" "$__PB10K_PROMPT_CHAR_PS2 " "$_omb_prompt_normal" }

主题通过_omb_util_add_prompt_command挂接两个钩子:__pb10k_timer_stop(记录命令耗时)与_omb_theme_PROMPT_COMMAND(重绘 PS1/PS2),见 powerbash10k.theme.sh 末尾。

提示符段落逐段解析

下面结合 powerbash10k.theme.sh 的源码实现,逐段说明每个段落显示什么、依赖什么、颜色如何变化。

user_info:用户信息、sudo 与 SSH 指示器

__pb10k_prompt_user_info 默认显示USER@主机名短名(hostname | cut -d'.' -f1去掉域名后缀):

  • sudo 缓存指示器:当THEME_SHOW_SUDO=true时,执行sudo -n id -u(-n表示非交互、不弹密码),若返回 0 说明当前已缓存 sudo 凭据,用户信息段颜色由默认的bold_olive切换为bold_brown。
  • SSH 登录指示器:若存在SSH_CLIENT环境变量,说明处于 SSH 会话,此时无条件显示用户信息;本地会话则仅当__PB10K_PROMPT_LOCAL_USER_INFO == true时才显示。

dir:当前目录

__pb10k_prompt_dir 以bold_navy显示 \w(Nerd Fonts 文件夹图标 + Bash 的\w转义,即完整工作目录路径)。

scm:SCM 仓库状态

__pb10k_prompt_scm 仅在THEME_SHOW_SCM=true时渲染:检测到 Git 仓库时先输出(Git 图标),再通过scm_prompt_info输出分支信息 <branch>。分支状态符号由主题顶部定义:

export SCM_THEME_PROMPT_PREFIX="" export SCM_THEME_PROMPT_SUFFIX="" export SCM_THEME_PROMPT_DIRTY=" ${_omb_prompt_bold_brown}✗${_omb_prompt_normal}" export SCM_THEME_PROMPT_CLEAN=" ${_omb_prompt_bold_green}✓${_omb_prompt_normal}"

即工作区有未提交改动时显示棕色✗,干净时显示绿色✓。底层的scm/scm_prompt_info实现位于 lib/omb-prompt-base.sh,它会依次检测.git/HEAD、git rev-parse --is-inside-work-tree、.hg、.svn来识别仓库类型,并支持通过git config oh-my-bash.hide-status关闭状态检测。

cmd_duration:命令耗时

这是 powerbash10k 相对 Brainy 新增的段落。__pb10k_timer_start 通过trap '__pb10k_timer_start' DEBUG在每条命令执行前记录SECONDS;命令结束后由挂接在 PROMPT_COMMAND 上的__pb10k_timer_stop计算差值。__pb10k_format_duration 将秒数格式化为Nh Nm Ns(小时/分钟/秒),最终由 __pb10k_prompt_cmd_duration 以bold_navy显示 <时长>。

python:Python 环境

__pb10k_prompt_python 在THEME_SHOW_PYTHON=true时调用库函数_omb_prompt_get_python_env(定义于 lib/omb-prompt-base.sh),它会依次探测:

  • virtualenv:VIRTUAL_ENV环境变量(见 _omb_prompt_get_virtualenv);
  • conda 环境:CONDA_DEFAULT_ENV(见 _omb_prompt_get_condaenv);
  • Python 版本:python --version输出(见 _omb_prompt_get_python_version)。

多个环境并存时用逗号连接并放在括号里,py-前缀会被替换为 Nerd Fonts 的 Python 图标。截图中的.venv激活场景(终端执行activate后提示符出现 Python 环境信息)正是此段的效果。

ruby:Ruby 环境

__pb10k_prompt_ruby 在THEME_SHOW_RUBY=true时显示rb-+ 版本信息,文本用[|]包裹。版本信息来自库函数_omb_prompt_print_ruby_env,其底层 _omb_prompt_get_ruby_env 会依次探测rbfu(RBFU_RUBY_VERSION)、rbenv(rbenv version-name,支持 gemset)、rvm(rvm-prompt)与chruby,见 lib/omb-prompt-base.sh。

todo:Todo.txt 状态

__pb10k_prompt_todo 需要系统中存在todo.sh可执行文件(通过_omb_util_binary_exists todo.sh检测,缺失则直接跳过),然后解析todo.sh ls输出中形如TODO: N of M的任务统计,显示t:<M>。该段默认关闭(THEME_SHOW_TODO=false),只有启用且安装了 Todo.txt CLI 工具才会出现在提示符中。

clock:时钟

__pb10k_prompt_clock 以图标 +date +"$THEME_CLOCK_FORMAT"输出当前时间,颜色取THEME_CLOCK_COLOR。

battery:电池电量

__pb10k_prompt_battery 依赖 oh-my-bash 的 battery 插件(先检查$OSH/plugins/battery/battery.plugin.sh是否存在)。电量百分比来自插件提供的battery_percentage函数,配色规则为:

  • 电量 ≥ 50%:绿色;
  • 25% ≤ 电量 < 50%:橄榄色;
  • 电量 < 25%:棕色;
  • 充电中(ac_adapter_connected返回真)追加+后缀;电量 100% 且充电中显示为AC。

插件实现见 plugins/battery/battery.plugin.sh,它优先使用upower读取电池信息,其次回退到acpi。

exitcode:退出码

__pb10k_prompt_exitcode 仅在退出码非 0 时以bold_red显示✘ <code>(如✘ 1)。截图里执行false后出现的红色退出码即源于此段。

char:提示符字符

__pb10k_prompt_char 根据退出码着色:成功时绿色、失败时红色,内容为__PB10K_PROMPT_CHAR_PS1(默认❯,可用THEME_PROMPT_CHAR_PS1覆盖)。

配置方式一:pb10k命令动态开关

README 提供了两种配置途径,第一种是即时生效的pb10k命令:

pb10k show <segment> pb10k hide <segment>

例如pb10k show clock立即显示时钟段,pb10k hide python立即隐藏 Python 段。要点:

  • Tab 补全默认启用:主题文件末尾执行了complete -F __pb10k_completion pb10k(powerbash10k.theme.sh)。补全函数支持的动作是show/hide,可补全的段名为battery clock exitcode python ruby scm sudo todo(见 __pb10k_completion)。
  • 生效范围:pb10k的配置仅对当前 shell 及其后启动的子 shell 生效。这是因为实现上采用export导出环境变量——__pb10k_show 执行export "THEME_SHOW_$seg=true",__pb10k_hide 执行export "THEME_SHOW_$seg=false"。新开的终端会话不会保留这些设置。
  • 大小写不敏感:入口函数 pb10k 会先把段名tr '[:lower:]' '[:upper:]'转为大写再交给 show/hide 函数;传入非show/hide的动作会向 stderr 输出错误并返回 1。

配置方式二:主题环境变量(永久生效)

若要让设置对所有终端会话永久生效,需要在~/.bashrc(或其他 bash 启动文件)中预先定义对应变量。下表完整列出 README 声明的变量及其默认值,并标注了源码 themes/powerbash10k/powerbash10k.theme.sh#L316-L334 中确认的默认值:

变量README 给出的值源码默认值说明
THEME_SHOW_SUDOtruetrue是否检测并高亮缓存 sudo 凭据
__PB10K_PROMPT_LOCAL_USER_INFOfalse(用于隐藏)true本地会话是否显示用户信息;设为false可隐藏(仅 SSH 会话显示)
THEME_SHOW_SCMtruetrue是否显示 SCM 仓库状态
THEME_SHOW_RUBYfalsefalse是否显示 Ruby 环境
THEME_SHOW_PYTHONfalsefalse是否显示 Python 环境
THEME_SHOW_TODOfalsefalse是否显示 Todo.txt 状态
THEME_SHOW_CLOCKtruetrue是否显示时钟
THEME_CLOCK_COLOR$bold_cyan(示例)$_omb_prompt_bold_white时钟颜色
THEME_CLOCK_FORMAT"%H:%M:%S""%H:%M:%S"时钟格式,遵循date命令的格式语法
THEME_SHOW_BATTERYfalsefalse是否显示电池电量
THEME_SHOW_EXITCODEtruetrue是否显示退出码

两点需要注意的差异:

  1. __PB10K_PROMPT_LOCAL_USER_INFO:README 在 "User Information" 一节将其写为false,语义是"为本地用户隐藏用户信息(只在 SSH 会话显示)";而源码的默认值实为true(${__PB10K_PROMPT_LOCAL_USER_INFO:-"true"}),即默认本地会话也显示用户名。若想达到 README 描述的效果,请在~/.bashrc中显式设置__PB10K_PROMPT_LOCAL_USER_INFO=false。
  2. THEME_CLOCK_COLOR:README 给出的$bold_cyan是示例值,源码默认值实际是$_omb_prompt_bold_white(白色);两者都是合法取值,按需覆盖即可。

此外还有两个提示符字符变量(README 未列但源码支持,见 powerbash10k.theme.sh#L328-L329):

__PB10K_PROMPT_CHAR_PS1=${THEME_PROMPT_CHAR_PS1:-"❯"} # 主提示符字符 __PB10K_PROMPT_CHAR_PS2=${THEME_PROMPT_CHAR_PS2:-"\\"} # 续行提示符字符

一个典型的永久配置示例(追加到~/.bashrc):

OSH_THEME="powerbash10k" THEME_SHOW_PYTHON=true # 启用 Python 环境显示 THEME_SHOW_RUBY=true # 启用 Ruby 环境显示 THEME_SHOW_BATTERY=true # 启用电池显示(笔记本场景) THEME_CLOCK_FORMAT="%H:%M" # 精简时钟格式 THEME_CLOCK_COLOR=$bold_cyan __PB10K_PROMPT_LOCAL_USER_INFO=false # 本地会话隐藏用户名,仅 SSH 显示

重新编排段落顺序

提示符各段的位置并非写死,README 的 "Prompt Segments Order" 一节说明:可用三个环境变量分别定义顶左、顶右、底部的段序列(空格分隔),当前可用的段名共 11 个:

battery char clock cmd_duration dir exitcode python ruby scm todo user_info

默认值即:

__PB10K_TOP_LEFT="dir scm" __PB10K_TOP_RIGHT="exitcode cmd_duration user_info python ruby todo clock battery" __PB10K_BOTTOM="char"

例如想把用户信息移到最左侧、把时钟从右侧挪到底部,可设置:

__PB10K_TOP_LEFT="user_info dir scm" __PB10K_TOP_RIGHT="exitcode cmd_duration python ruby todo battery" __PB10K_BOTTOM="char clock"

底层渲染时,__pb10k_top 会遍历__PB10K_TOP_LEFT/__PB10K_TOP_RIGHT中的每个段名,调用同名函数__pb10k_prompt_<seg>,再用_omb_util_split按空格拆分、按|解析"颜色|文本|前缀|后缀"四元组拼接(见 __pb10k_top_left_parse 与 __pb10k_top_right_parse);某个段函数返回空(如未启用或依赖缺失),该段会自动跳过。

主题源码结构速览

整个主题收敛在单个文件 themes/powerbash10k/powerbash10k.theme.sh 中,按职责可分为五层,便于读者自行阅读与二次开发:

  1. Helpers(辅助层):__pb10k_remove_empty_elements(清理空元素)、__pb10k_format_duration(秒数转Nh Nm Ns)、__pb10k_timer_start/stop(配合trap ... DEBUG计时)。
  2. Parsers(解析层):__pb10k_top_left_parse/__pb10k_top_right_parse/__pb10k_bottom_parse,把"颜色|内容|前缀|后缀"格式的段信息渲染进对应区域。
  3. Segments(段实现层):__pb10k_prompt_<seg>系列函数,每个段落一个函数,遵循"未启用即return 0"的统一约定。
  4. CLI(命令层):pb10k show/hide及其 Tab 补全函数__pb10k_completion。
  5. Variables + Prompt(变量与装配层):变量默认值定义段(L316-L334)以及组装 PS1/PS2 的__pb10k_ps1/__pb10k_ps2。

使用中的注意事项

  • 图标依赖 Nerd Fonts:未安装对应字体时图标会显示异常,这是本主题唯一的硬性前置条件。
  • battery 段依赖插件:需要 oh-my-bash 的 battery 插件存在于$OSH/plugins/battery/battery.plugin.sh,且系统提供upower或acpi工具(见 plugins/battery/battery.plugin.sh)。
  • todo 段依赖todo.sh:未安装 Todo.txt CLI 时该段自动隐藏,不会报错。
  • pb10k命令不持久化:动态开关只影响当前及子 shell;需要跨会话生效请改用~/.bashrc中的环境变量。
  • sudo检测可能触发缓存刷新:sudo -n id -u使用非交互模式,未缓存凭据时静默失败,不会弹出密码提示,但也意味着它无法"主动"刷新缓存,只反映当前已有状态。

综上,powerbash10k 在 oh-my-bash 中提供了一套"开箱即用、按需裁剪"的多彩分段提示符方案:既有类似 powerlevel10k 的视觉层次,又有pb10k命令带来的即时可调性,同时通过__PB10K_TOP_LEFT/__PB10K_TOP_RIGHT/__PB10K_BOTTOM三变量保留了充分的布局自由度,适合追求信息密度与可定制性的 Bash 用户。

  • 开发工具
  • CLI

【免费下载链接】oh-my-bash

A delightful community-driven framework for managing your bash configuration, and an auto-update tool so that makes it easy to keep up with the latest updates from the community.

项目地址:https://gitcode.com/gh_mirrors/oh/oh-my-bash
点击查看免费下载

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/15 16:01:45

IEEE 39节点系统:电网仿真从潮流计算到新能源接入的实战指南

电网仿真这行当&#xff0c;跑过IEEE 39节点系统&#xff0c;才算真正摸到了电力系统稳态和暂态分析的门槛。这个经典算例圈内叫“新英格兰系统”&#xff0c;从上世纪八十年代沿用至今&#xff0c;几乎所有主流仿真软件都内置了它的标准参数&#xff0c;我当初刚接触BPA和PSAS…

作者头像 李华
网站建设 2026/10/15 16:01:30

TradingView警报批量生成:TypeScript工具与3Commas集成全解析

简介&#xff1a;这是一个用TypeScript开发的TradingView批量警报添加工具&#xff0c;主要面向需要将TradingView自定义警报对接3Commas等交易机器人的量化交易者&#xff0c;解决手动为数十乃至数百个交易对逐一维护警报的痛点。项目借助开源自动化浏览器方案&#xff0c;能够…

作者头像 李华
网站建设 2026/10/15 16:01:25

STM32双IIC读取MPU6050与9250磁力计卡尔曼滤波姿态解算

简介&#xff1a;这是一套面向嵌入式开发者的STM32F1姿态解算工程源码与配套项目文件&#xff0c;整合了MPU6050&#xff08;IIC1&#xff09;与MPU9250&#xff08;IIC2&#xff09;双传感器数据读取、卡尔曼滤波融合及姿态角输出&#xff0c;适合需要从零实现俯仰、横滚、偏航…

作者头像 李华
网站建设 2026/10/15 16:01:17

Unity 3D 嵌入 Ionic 双端集成:Cordova 桥接与 Vuforia 实战

简介&#xff1a;面向移动端混合应用开发与增强现实&#xff08;AR&#xff09;集成领域的工程师&#xff0c;这套资源提供了一套完整的Unity与Ionic互操作方案&#xff0c;演示如何将Unity 3D场景嵌入Ionic应用&#xff0c;并在两者之间双向传递消息&#xff0c;兼容Android与…

作者头像 李华
网站建设 2026/10/15 16:01:06

陪了两千万人的AI,破产了

陪了两千万人的AI&#xff0c;破产了 10月13日&#xff0c;Character.AI 申请了 Chapter 11 破产保护。五年。 这平台你可能没玩过&#xff0c;但大概见过——它不干别的&#xff0c;就是让你自己捏一个角色&#xff0c;然后跟它聊天。 捏谁都行&#xff0c;编的、演的、你脑子…

作者头像 李华