🧠 定位与价值 >>>
先把它当成 Bash 的配置层来看:它负责把主题、插件、别名、补全和自定义目录统一接管,适合在 Git Bash 里做增强。
oh-my-bash:Bash 配置框架,不是 Bash 本体主题 / 插件 / 别名 / 补全 / 自定义:收拢到一套可迁移的入口里~/.bashrc ~/.bash_profile:安装后会接管 Bash 的加载链,Windows 的 Git Bash 还要关注这两个入口dotfiles 管理:适合想要更清晰的提示符、更少的重复输入、以及更统一配置的人激活成功:最直观的变化就是主题、别名和补全开始生效
# 先找入口,再谈功能
echo "$OSH"
echo "$OSH_THEME"
🧭 快速定位 >>>
Oh My Bash 是 Bash 配置框架,核心就是主题、插件、别名、补全和更新。先记住它主要靠 `~/.bashrc` 驱动。
OSH ~/.oh-my-bash:Oh My Bash 安装目录,默认是OSH_THEME font:当前主题名,默认模板是plugins:需要加载的插件数组aliases:需要加载的别名包数组completions:需要加载的补全数组source "$OSH"/oh-my-bash.sh:真正启动 Oh My Bash 的入口upgrade_oh_my_bash:手动更新uninstall_oh_my_bash:卸载并回退配置
echo "$OSH"
echo "$OSH_THEME"
type upgrade_oh_my_bash
type uninstall_oh_my_bash
安装只需一行命令,脚本会自动备份原有 `.bashrc` 并写入新配置。安装前确认已有 `bash`、`git`、`curl` 或 `wget`。
bash -c "$(curl -fsSL ...)":通过 curl 安装(推荐)bash -c "$(wget -qO- ...)":无 curl 时用 wget 替代~/.bashrc.omb-backup-*:安装时自动备份的原始配置OSH_THEME ~/.bashrc:安装后在 里改这一行就可以换主题git clone source:先 仓库,再手动追加 入口
# curl 安装
bash -c "$(curl -fsSL https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
# wget 安装
bash -c "$(wget -qO- https://raw.githubusercontent.com/ohmybash/oh-my-bash/master/tools/install.sh)"
# 离线 / 指定目录安装
OSH=~/.oh-my-bash git clone https://github.com/ohmybash/oh-my-bash.git "$OSH"
# 然后手动在 ~/.bashrc 追加:
# export OSH="$HOME/.oh-my-bash"
# source "$OSH/oh-my-bash.sh"
🪟 Windows / Git Bash 起手 >>>
在 Windows 上,最稳的用法是把 Git Bash 当成 Bash 环境来处理:改 `~/.bashrc`,确保 `~/.bash_profile` 会再转到它。
~/.bashrc ~/.bash_profile~/.bash_profile source ~/.bashrc/c/Users/<name>/... C:\...notepad.exe ~/.bashrc code ~/.bashrc- 如果主题符号乱码,先换终端字体,再判断是不是主题不兼容
- 推荐终端 : Windows Terminal + Git Bash profile,比默认 mintty 更稳
# ~/.bash_profile
if [[ -f ~/.bashrc ]]; then
source ~/.bashrc
fi
# Windows 路径和 Unix 路径互转
cygpath -u 'C:\Users\me\Downloads'
cygpath -w '/c/Users/me/.oh-my-bash'
✅ 安装后验证 / 激活检查 >>>
安装后不要先看目录,先看加载链。只要主题变量、更新命令和启动文件链都能读出来,基本就算激活成功。
test -d ~/.oh-my-bash:目录存在,说明文件已落地echo "$OSH":应该输出安装目录echo "$OSH_THEME":当前主题变量已读入type upgrade_oh_my_bash:更新命令可用,说明框架脚本已加载type uninstall_oh_my_bash:卸载命令可用,说明脚本已注入当前 shelldeclare -p plugins aliases completions 2>/dev/null:检查常用数组是否已读入grep -nE 'source ~/.bashrc|\\. ~/.bashrc' ~/.bash_profile ~/.bashrc 2>/dev/null:Git Bash 的启动链检查exec bash:重启当前 shell 再看一次最终效果
# 基本验证
test -d ~/.oh-my-bash && echo "installed"
echo "$OSH"
echo "$OSH_THEME"
type upgrade_oh_my_bash
type uninstall_oh_my_bash
# Git Bash 启动链
grep -nE 'source ~/.bashrc|\. ~/.bashrc' ~/.bash_profile ~/.bashrc 2>/dev/null
# 重新加载后再确认
source ~/.bashrc
🚀 最小工作流 >>>
第一次接手一台机器时,不要先改很多模块,先确认加载链、主题和一个插件能不能正常工作。
source ~/.bashrc
alias
declare -p OSH_THEME plugins aliases completions 2>/dev/null
🎨 主题切换 >>>
主题是最容易立刻看到效果的部分。Windows 下优先选稳定主题,追求花哨前先确认字体支持。
OSH_THEME="font":默认主题,最稳OSH_THEME="random":每次随机一个主题OMB_THEME_RANDOM_CANDIDATES=(...):只从指定列表里随机OMB_THEME_RANDOM_IGNORED=(...):排除不想要的主题OMB_THEME_RANDOM_SELECTED:当前随机到的主题名agnoster:常见漂亮主题,但通常需要 Powerline / Nerd Fontls "$OSH/themes"OSH_THEME=xxx source ~/.bashrc:直接 ,不用重开终端
# 主题切换:稳妥起步
OSH_THEME="font"
# 主题切换:随机,但限制候选
OSH_THEME="random"
OMB_THEME_RANDOM_CANDIDATES=("font" "powerline-light" "minimal")
OMB_THEME_RANDOM_IGNORED=("powerbash10k" "wanelo")
# 快速预览所有主题(循环切换,每次回车换下一个)
for theme in "$OSH"/themes/*/; do
t=$(basename "$t")
echo ">>> $t"
OSH_THEME="$t" source ~/.bashrc
read -r
done
🧩 插件 / 别名 / 补全 >>>
这三类东西决定你日常是否顺手。顺序建议是先补全,再插件,最后别名,避免一口气加载太多拖慢启动。
completions=(git composer ssh):按需加载补全aliases=(general):加载别名包plugins=(git bashmarks):加载插件包custom/completions/:自定义补全目录custom/aliases/:自定义别名目录custom/plugins/:自定义插件目录custom/themes/:自定义主题目录ls "$OSH/plugins"ls "$OSH/aliases"ls "$OSH/completions"
# 典型配置
completions=(
git
composer
ssh
)
aliases=(
general
)
plugins=(
git
bashmarks
)
# 条件加载:只在 SSH 会话里启用某个插件
[ "$SSH_TTY" ] && plugins+=(tmux-autoattach)
# 查看某个别名包里定义了哪些别名
cat "$OSH/aliases/general.aliases.sh"
# 查看某个插件提供了什么函数
grep -E '^function |^[a-z_]+\(\)' "$OSH/plugins/git/git.plugin.sh"
常用内置别名(general)
.. ... ....:向上跳 1 / 2 / 3 层目录ll ls -lhla ls -lAhlx:按扩展名排序列目录lk:按文件大小排序lt:按修改时间排序md mkdir -prd rmdirplease sudo:(复用上一条命令时加 sudo)h historyj jobs -l
# 这些是 general 别名包给你的,不用自己写
.. # cd ..
... # cd ../..
ll # ls -lh
la # ls -lAh
md foo # mkdir -p foo
please # sudo !!
h | grep ssh
常用内置别名(git)
g gitga git addgaa git add --allgc git commitgcm git commit -mgco git checkoutgcb git checkout -bgd git diffgds git diff --stagedgl git pullgp git pushgst git statusglg git log --oneline --graph --decorate
# 日常 git 流程极简版
gaa
gcm "fix: typo"
gp
💬 提示符变量(Prompt) >>>
Oh My Bash 主题通过一组 `OMB_PROMPT_*` 变量控制提示符内容的显示与隐藏,改这些变量比直接改主题文件更安全。
OMB_PROMPT_SHOW_PYTHON_VENV=true:显示 Python 虚拟环境名OMB_PROMPT_SHOW_SPACK_ENV=true:显示 Spack 环境名OMB_PROMPT_SHOW_RUBY_GEMSET=true:显示 RVM gemset(部分主题支持)OMB_PROMPT_SHOW_NVM_VERSION=true:显示 Node 版本(部分主题支持)OMB_PROMPT_SHOW_AWS_VAULT=true:显示 aws-vault profile(部分主题支持)OMB_USE_SUDO=true:允许 Oh My Bash 内部命令在需要时使用 sudoOMB_TERM_USE_TPUT=true:用 tput 代替转义序列初始化颜色,可降低开销
# 在 ~/.bashrc 里,放在 source oh-my-bash.sh 之前生效
export OMB_PROMPT_SHOW_PYTHON_VENV=true
export OMB_PROMPT_SHOW_SPACK_ENV=false
export OMB_TERM_USE_TPUT=true
🛠️ 自定义与覆盖 >>>
真正适合长期用的做法,是把个性化内容放进 `custom/`,而不是直接改上游模块。这样升级时冲突最少。
OSH_CUSTOM:自定义目录根路径custom/:里的同名文件会覆盖内置模块theme/plugin/alias/completion:都可以按同样思路覆盖- 先复制再改 : 适合想保留上游更新能力的场景
custom/ .sh:会被自动 source,适合放全局函数和环境变量
# 自定义目录放到 dotfiles 里
export OSH_CUSTOM="$HOME/.dotfiles/oh-my-bash-custom"
# 覆盖主题
mkdir -p "$OSH_CUSTOM/themes"
cp -r "$OSH/themes/agnoster" "$OSH_CUSTOM/themes/"
# 新建全局自定义脚本(会被自动 source)
cat > "$OSH_CUSTOM/my-exports.sh" << 'EOF'
export EDITOR=vim
export HISTSIZE=50000
export HISTFILESIZE=100000
EOF
$OSH_CUSTOM/
├─ themes/
├─ plugins/
├─ aliases/
├─ completions/
└─ my-exports.sh ← 任意 .sh 文件都会被自动加载
🔄 更新 / 卸载 / 迁移 >>>
更新和卸载都不复杂,关键是先确认你有没有把本地改动放在 `custom/`,否则升级时容易被覆盖。
upgrade_oh_my_bash:手动更新到最新提交DISABLE_UPDATE_PROMPT=true:关闭升级提示DISABLE_AUTO_UPDATE=true:关闭自动更新检查UPDATE_OSH_DAYS=13:调整检查间隔(天数)uninstall_oh_my_bash:回滚并删除安装~/.bashrc $OSH_CUSTOM:只需复制 和 目录,再重新安装框架本体
# 手动更新
upgrade_oh_my_bash
# 关闭自动检查
DISABLE_AUTO_UPDATE=true
# 迁移:打包自定义配置
tar czf omb-custom.tar.gz ~/.bashrc "$OSH_CUSTOM"
⚡ 性能调优 >>>
启动慢几乎都是插件和补全太多导致的。先用 `time` 或 `bash -i -c exit` 测基线,再逐步排除。
time bash -i -c exit:测量 Bash 启动耗时,基线应在 200ms 以内DISABLE_AUTO_UPDATE=true:更新检查会在后台加一次网络请求completions:是最常见的启动杀手,只留必要的OMB_TERM_USE_TPUT=true:降低终端颜色初始化成本$(git status):每次刷新提示符都会 fork 一个进程- 关闭 dirty 检查 : 大仓库里 git dirty 状态检测极慢,主题通常有开关变量
# 测基线
time bash -i -c exit
# 二分法定位慢在哪一段
# 注释掉一半 plugins,再测;缩小范围直到找到元凶
time bash -i -c exit
# 关闭 git dirty 检测(以 powerline 主题为例)
OMB_THEME_POWERLINE_DISABLE_GIT_STATUS=true
⚠️ 常见坑 >>>
大多数问题都不是"框架坏了",而是启动文件链、字体、路径和模块选择出了问题。
~/.bash_profile ~/.bashrc:Git Bash 里最常见- 主题乱码 : 先换字体(推荐 Nerd Font / Cascadia Code PL),再换主题
time bash -i -c exit:少加载插件和补全,用 定位PATH .bashrc:检查 是否被你自己的 改坏- 仓库状态太慢 : 关闭过重的 dirty 检查
OSH_CUSTOM .sh .sh:文件名里不能有空格,扩展名必须是$OSH/themes/:检查是否直接改了 下的文件,改动被覆盖了echo "$BASH_VERSION":确认当前用的是哪个complete completions source oh-my-bash.sh:检查 数组是否写在 之前
# 排查顺序
echo "$0"
echo "$BASH_VERSION"
echo "$OSH"
echo "$OSH_THEME"
echo "$OSH_CUSTOM"
source ~/.bashrc
📌 Quick Ref >>>
适合日常查阅的高频项汇总,先看这一张就能大致判断该改哪一段。
| 项 | 作用 |
|---|
| OSH_THEME | 切换主题 |
| plugins | 启用插件 |
| aliases | 启用别名包 |
| completions | 启用补全包 |
| OSH_CUSTOM | 覆盖内置模块 |
| DISABLE_AUTO_UPDATE | 关闭自动更新 |
| DISABLE_UPDATE_PROMPT | 关闭更新提示 |
| UPDATE_OSH_DAYS | 更新检查间隔(天) |
| OMB_USE_SUDO | 控制内部是否使用 sudo |
| OMB_PROMPT_SHOW_PYTHON_VENV | 显示/隐藏 Python 虚拟环境 |
| OMB_PROMPT_SHOW_SPACK_ENV | 显示/隐藏 Spack 环境 |
| OMB_TERM_USE_TPUT | 降低终端颜色初始化成本 |
| OMB_THEME_RANDOM_CANDIDATES | 随机主题候选列表 |
| OMB_THEME_RANDOM_IGNORED | 随机主题排除列表 |
| OMB_THEME_RANDOM_SELECTED | 当前随机到的主题名 |
| upgrade_oh_my_bash | 手动更新框架 |
| uninstall_oh_my_bash | 卸载并回退配置 |