通过引入 terminal_width 函数,将原本固定的终端宽度检测逻辑重构为动态获取。当未指定固定宽度时,脚本将实时读取当前终端窗口尺寸,提升了在不同交互环境下(如窗口缩放)的显示适配能力。 同时更新了配套文档,明确了命令行参数、环境变量与动态检测之间的优先级关系。
109 lines
2.9 KiB
Markdown
109 lines
2.9 KiB
Markdown
# 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 策略是否允许自动升级。
|