Files
script/homebrew/README.md
Orion 6a0fe9dded refactor(core): ♻️ 优化终端宽度检测逻辑为动态获取
通过引入 terminal_width 函数,将原本固定的终端宽度检测逻辑重构为动态获取。当未指定固定宽度时,脚本将实时读取当前终端窗口尺寸,提升了在不同交互环境下(如窗口缩放)的显示适配能力。

同时更新了配套文档,明确了命令行参数、环境变量与动态检测之间的优先级关系。
2026-05-04 02:02:23 +08:00

109 lines
2.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Homebrew Upgrade Manager
`brew-upgrade-manager.sh` 是一个 macOS Homebrew 升级脚本,用来按固定流程更新仓库、检查环境、升级命令行工具和 GUI 应用,并清理旧缓存。
## 功能
- 执行 `brew update -v` 更新 Homebrew 仓库。
- 执行 `brew doctor` 做健康检查,发现问题时给出警告但不中断后续流程。
- 自动检查并安装 `buo/cask-upgrade`,用于提供 `brew cu`
- 使用 `brew upgrade --formula` 升级命令行 Formula。
- 使用 `brew cu -yaq` 升级 Cask GUI 应用。
- 使用 Python PTY 包装 `brew cu`,用于处理交互输入转发和终端尺寸问题。
- 执行 `brew cleanup --prune=all` 清理旧版本与缓存。
## 依赖
- macOS
- Homebrew
- Bash
- Python 3
- 可访问 Homebrew tap 的网络环境
可先检查:
```bash
brew --version
python3 --version
```
## 使用方法
进入目录并赋予执行权限:
```bash
cd homebrew
chmod +x brew-upgrade-manager.sh
```
运行:
```bash
./brew-upgrade-manager.sh
```
默认会动态读取当前终端宽度;运行过程中缩放窗口时,`brew cu` 的 PTY 尺寸也会跟随更新。如果遇到非交互环境或某些表格渲染异常,可以指定固定终端宽度:
```bash
./brew-upgrade-manager.sh --width 130
./brew-upgrade-manager.sh --width=130
```
也可以通过环境变量指定:
```bash
HB_TERMINAL_WIDTH=130 ./brew-upgrade-manager.sh
```
优先级为:命令行 `--width` 高于 `HB_TERMINAL_WIDTH`。两者都不设置时使用动态终端宽度。
## sudo 认证
脚本不会保存、传递或自动注入 sudo 密码。如果你的 `brew cu` 流程会触发 sudo建议在运行脚本前先刷新 sudo 凭据:
```bash
sudo -v
./brew-upgrade-manager.sh
```
如果 sudo 凭据过期,脚本内的 PTY 逻辑只会把你的键盘输入转发给子进程,不会嗅探 `Password:` 提示,也不会替你填写密码。
## 执行流程
1. 打印分隔线并更新 Homebrew 仓库。
2. 执行 `brew doctor`
3. 检查 `buo/cask-upgrade` tap。
4. 升级 Formula。
5. 升级 Cask。
6. 清理 Homebrew 缓存。
## 常见问题
### `brew cu` 不存在
脚本会自动执行:
```bash
brew tap buo/cask-upgrade
```
如果失败通常是网络、Homebrew tap 或权限问题。
### 表格渲染或 Ruby 报终端宽度错误
默认会跟随终端窗口变化;如果某些环境无法正确报告窗口尺寸,可以使用固定宽度运行:
```bash
./brew-upgrade-manager.sh --width 130
```
### sudo 卡住
先在交互终端运行 `sudo -v`,确认 sudo 凭据有效后再执行脚本。非交互环境中请避免依赖脚本内输入密码。
## 注意事项
- 脚本启用了 `set -e``set -o pipefail`,关键命令失败会终止流程。
- 升级 GUI 应用可能关闭或替换已安装应用,建议在重要工作保存后执行。
- 如果你使用公司设备或受管 macOS先确认 Homebrew、Cask 和 sudo 策略是否允许自动升级。