开发工具CLI【免费下载链接】oh-my-bashA 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点击查看免费下载absimple 是 oh-my-bash 内置的一款多彩分段式segmentedBash 提示符主题它源自经典 agnoster 主题以只在需要时显示相关信息为设计宗旨Git 信息只在 git 工作目录出现用户状态、错误码、后台任务等均按需自动呈现。本文将以 themes/absimple/README.md 为主线结合 absimple.theme.sh 及其上游 agnoster.theme.sh 的源码实现完整讲解 absimple 的安装启用、分段结构、提示符组装流程与可配置项帮助你读懂甚至二次定制这个主题。主题定位来自 agnoster 的精简分支根据 themes/absimple/README.mdabsimple 是一个基于 agnoster 主题、更短更简单的彩色主题。它的核心设计目标可以概括为三点只显示相关信息Git 信息仅在 git 工作目录中显示自动按需呈现当前用户与主机名、上一条命令是否出错、当前 shell 是否有后台任务等都会在合适的时机自动出现无需手动开关Powerline 风格渲染主题依赖 Powerline 补丁字体才能正确渲染分段箭头与特殊符号原文档推荐使用 termux-style 字体方案尤其适合 Termux/Android 环境。从源码注释absimple.theme.sh可以看到该主题曾于 2022-02-15 在 Android 的 Termux 环境下实测通过因此对移动端终端用户尤为友好。前置条件Powerline 补丁字体与所有 agnoster 系主题一样absimple 使用SEGMENT_SEPARATOR等 Powerline 专用符号来衔接各分段因此必须先安装 Powerline-patched 字体否则提示符会出现乱码或方块。原文档明确说明This theme needs a Powerline-patched font to be rendered correctly.具体场景中桌面 Linux/macOS 用户可安装任一 Powerline 补丁字体族并在终端模拟器中选择该字体Termux/Android 用户则推荐原文档提及的 termux-style 字体方案。装好字体后需要重启终端或重新打开终端会话使字体配置生效。安装与启用 absimple 主题absimple 主题随 oh-my-bash 仓库内置分发路径为 themes/absimple/absimple.theme.sh无需单独下载。1. 安装 oh-my-bash如果尚未安装 oh-my-bash先执行仓库提供的安装脚本bash install.sh # 位于 tools/install.sh安装完成后oh-my-bash 会生成~/.bashrc基于 templates/bashrc.osh-template 模板。2. 设置主题变量编辑~/.bashrc找到主题配置行模板默认值为OSH_THEMEfont见 templates/bashrc.osh-template将其修改为OSH_THEMEabsimple保存后执行source ~/.bashrc或重新打开终端即可生效。3. 主题加载机制oh-my-bash 在初始化脚本 oh-my-bash.sh 中根据OSH_THEME变量加载主题if [[ $OSH_THEME ]]; then _omb_module_require_theme $OSH_THEME fi_omb_module_require_theme会按固定顺序在以下路径中查找主题文件见 oh-my-bash.shtheme) locations({$OSH_CUSTOM{,/themes},$OSH/themes}/$name/$name.theme.{bash,sh}) ;;也就是说它会优先在$OSH_CUSTOM自定义目录默认~/.oh-my-bash/custom中查找absimple/absimple.theme.sh找不到再回退到内置的$OSH/themes/absimple/。如果你想要自定义修改 absimple 而又不动内置文件只需在 custom 目录中创建同名目录与文件即可覆盖。另外OSH_THEME还支持random取值——每次加载随机挑选一个主题并可用OMB_THEME_RANDOM_IGNORED排除不喜欢的主题、用OMB_THEME_RANDOM_CANDIDATES限定候选列表见 templates/bashrc.osh-templateOSH_THEMErandom OMB_THEME_RANDOM_IGNORED(powerbash10k wanelo) OMB_THEME_RANDOM_CANDIDATES(font powerline-light minimal)源码结构继承 agnoster覆写而非重写absimple 主题实现的高明之处在于复用而非重写。文件第一行执行逻辑就是加载上游 agnoster 主题absimple.theme.shsource $OSH/themes/agnoster/agnoster.theme.sh注释中明确写道a most part of this theme is the same as agnoster, so let us source the original theme agnoster and just override its functions. In this way, the maintenance becomes easier.因此absimple 自动继承了 agnoster 提供的基础设施包括分段绘制函数prompt_segment、prompt_end见 agnoster.theme.sh负责将背景色 前景色 文本渲染成带SEGMENT_SEPARATOR衔接的分段颜色/效果映射函数_omb_theme_agnoster_fg_color、_omb_theme_agnoster_bg_color、_omb_theme_agnoster_text_effect等见 agnoster.theme.sh支持 black/red/green/yellow/blue/magenta/cyan/white/orange其中 orange 使用 256 色扩展码38;5;166/48;5;166Git 状态分段prompt_git见 agnoster.theme.sh检测分支/游离 HEAD、脏状态●与 stash⚑状态分段prompt_status见 agnoster.theme.sh按需显示错误符号✘上一条命令返回码非 0、root 闪电符号⚡、后台任务齿轮符号⚙Python 虚拟环境分段prompt_virtualenv/prompt_condaenv见 agnoster.theme.sh。absimple 只覆写了少量关键函数便达成了更短更简单的效果这正是该主题维护成本低、代码极简的原因。分段覆写absimple 的精简体现在哪absimple 覆写了两个显示分段直接决定了提示符的短小程度。prompt_histdt历史编号分段absimple.theme.shfunction prompt_histdt { prompt_segment black default \! }黑色背景 默认前景色仅显示当前命令的历史编号\!。对比 agnoster 原版agnoster.theme.shfunction prompt_histdt { prompt_segment black default \! [\A] }原版还附带 24 小时制时间[\A]absimple 将其删去只保留历史编号提示符因此更紧凑。prompt_dir当前目录分段absimple.theme.shfunction prompt_dir { prompt_segment blue black \W }蓝色背景 黑色文字使用\W仅当前目录名而非 agnoster 原版的\w完整路径见 agnoster.theme.sh。例如在/home/user/projects/oh-my-bash下absimple 只显示oh-my-bash路径层级一多提示符也不会变得冗长——这正是simple最直观的体现。build_prompt提示符组装顺序absimple 的build_promptabsimple.theme.sh按以下顺序从左到右组装各分段function build_prompt { [[ ! -z ${AG_EMACS_DIRx} ]] prompt_emacsdir prompt_status [[ -z ${AG_NO_HISTx} ]] prompt_histdt #[[ -z ${AG_NO_CONTEXTx} ]] prompt_context if [[ ${OMB_PROMPT_SHOW_PYTHON_VENV-} ]]; then prompt_virtualenv prompt_condaenv fi prompt_dir prompt_git prompt_end }各分段职责与触发条件如下分段函数来源显示内容触发条件Emacs 目录追踪agnoster继承DIR pwd DIR设置了AG_EMACS_DIR环境变量时状态agnoster继承prompt_status✘错误 /⚡root /⚙后台任务对应条件成立时按需出现历史编号absimple 覆写prompt_histdt命令历史编号\!默认显示设置AG_NO_HIST后隐藏用户上下文agnosterprompt_contextuserhost当前源码中已被注释掉见下文说明Python 虚拟环境agnoster继承[v] venv/[c] conda开启OMB_PROMPT_SHOW_PYTHON_VENV且检测到环境时当前目录absimple 覆写prompt_dir\W目录名始终显示Git 信息agnoster继承prompt_git分支名、●脏、⚑stash仅位于 git 工作目录时需要特别指出两点README 与源码的差异原 README 描述包括当前用户和主机名但当前源码中prompt_context一行已被注释absimple.theme.sh实际渲染时不会显示 userhost 分段。如果你需要该信息取消注释即可注意同时需要设置DEFAULT_USER或在 SSH 会话中才会显示逻辑见 agnoster.theme.sh。不含 Mercurial 分段agnoster 的build_prompt末尾还有prompt_hgMercurial 支持见 agnoster.theme.shabsimple 将其整体移除进一步印证了只保留必要信息的取向。PROMPT_COMMAND日期时间的注入逻辑absimple 通过_omb_util_add_prompt_command注册自身的 PROMPT_COMMAND 钩子absimple.theme.shfunction _omb_theme_PROMPT_COMMAND { local RETVAL$? local PRIGHT local CURRENT_BGNONE local REPLY _omb_theme_agnoster_text_effect reset _omb_theme_agnoster_ansi_single $REPLY local PR$REPLY build_prompt PS1 # date randomly or once per hour if (( $(shuf -i 1-20 -n 1 --random-source/dev/urandom) 1 )) ; then PS1\$(date %a) $(date %Y-%m-%d) fi PSDATE$(date %H) # ... and time PS1$(date %H:%M:%S) # uncomment below to use right prompt # PS1\[$(tput sc; printf %*s $COLUMNS $PRIGHT; tput rc)\]$PR PS1$PR } _omb_util_add_prompt_command _omb_theme_PROMPT_COMMAND这段代码展示了 absimple 相对 agnoster 的第二个加料点——日期与时间提示符最左侧先注入当前时间HH:MM:SS始终显示完整日期周几 YYYY-MM-DD采用随机显示策略每次渲染有 1/20 的概率出现通过shuf -i 1-20从/dev/urandom取随机数注释中说明其初衷是随机或每小时显示一次兼顾信息可用性与界面简洁RETVAL$?在函数最开头捕获上一条命令的返回码供prompt_status判断是否显示✘_omb_util_add_prompt_command是 oh-my-bash 提供的提示符钩子注册函数见 lib/utils.sh它会把回调加入PROMPT_COMMAND链并自动去重主题卸载时也会随之清理lib/utils.sh右侧提示符rprompt能力保留但默认关闭函数__command_rpromptabsimple.theme.sh可一次性显示苏黎世、纽约、旧金山湾区、东京四个时区的时间需要时按注释取消 PS1 行的注释即可。可配置项与开关速查结合源码absimple 涉及的可配置环境变量汇总如下变量默认值作用依据AG_NO_HIST未设置显示历史编号置为非空后隐藏历史编号分段absimple.theme.shAG_EMACS_DIR未设置置为非空后启用 Emacs dirtrack 目录追踪分段absimple.theme.shAG_NO_CONTEXT未设置置为非空后隐藏 userhost 分段当前源码该分段默认注释此开关暂不生效agnoster.theme.shOMB_PROMPT_SHOW_PYTHON_VENVtrueagnoster 默认见 agnoster.theme.sh控制是否检测并显示 virtualenv/conda 分段absimple.theme.sh、lib/omb-prompt-base.shDEFAULT_USER未设置设置为当前用户名后即使非 SSH 也隐藏 context 分段agnoster.theme.sh你可以在~/.bashrc中通过export覆盖这些默认值例如export AG_NO_HIST1 # 不显示历史编号 export OMB_PROMPT_SHOW_PYTHON_VENVfalse # 关闭 Python 环境检测 OSH_THEMEabsimple二次定制建议从覆写机制入手理解了source override的架构后定制 absimple 变得非常直接。如果你希望调整某分段颜色直接覆写对应分段函数例如把目录改为青色背景# 放在 $OSH_CUSTOM/themes/absimple/absimple.theme.sh function prompt_dir { prompt_segment cyan black \W }恢复 userhost 显示在build_prompt中取消prompt_context注释并在~/.bashrc设置DEFAULT_USER仅在非 SSH 场景隐藏去掉日期随机逻辑将_omb_theme_PROMPT_COMMAND中的shuf判断改为固定显示或彻底移除。由于 oh-my-bash 优先加载$OSH_CUSTOM下的同名主题见 oh-my-bash.sh所有这些定制都不需要改动仓库内置文件升级 oh-my-bash 时也不会被覆盖。小结absimple 用不到 100 行的覆写代码在 agnoster 的成熟分段架构之上实现了更短、更简单、信息按需呈现的提示符目录只用\W、历史编号去掉时间、移除 userhost 与 Mercurial 支持同时创新性地加入随机日期显示与可选的多时区右提示符。对希望拥有 Powerline 观感又不想提示符过长、或者常在 Termux 等小屏终端工作的用户absimple 是一个值得直接启用的开箱即用选择对想学习 Bash 主题定制的人来说它的继承 覆写写法本身也是极佳的教学范本。赞分享开发工具CLI【免费下载链接】oh-my-bashA 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点击查看免费下载相关推荐ImageGlass照片缓存策略深度剖析螺旋预加载与LRU驱逐机制ImageGlass照片缓存策略深度剖析螺旋预加载与LRU驱逐机制 ImageGlass 是一款免费开源的跨平台图片查看器支持 90 种格式WEBP、G开发工具CLIoh-my-bash powerbash10k 主题完全指南Nerd Fonts 前提、pb10k 命令与三段式多彩提示符配置oh my bash powerbash10k 主题完全指南Nerd Fonts 前提、 pb10k 命令与三段式多彩提示符配置 powerbash10k 是开发工具CLIMfkey32v2如何突破Mifare Classic安全屏障的3大技术突破Mfkey32v2如何突破Mifare Classic安全屏障的3大技术突破 Mfkey32v2是一款专业的Mifare Classic密钥计算工具能够从读网络安全创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考