refactor(homebrew): 重构脚本中的颜色输出和错误处理功能

- 添加了 RED 颜色常量定义和相应的颜色代码调整
- 替换了原有的 echo 命令为新的打印函数(如 print_error、print_warning 等)
- 实现了统一的错误消息输出格式,使用 print_error 函数
- 优化了颜色输出的实现方式,使用 printf 替代 echo -e
- 在 bootstrap 脚本中也实现了类似的颜色输出和错误处理函数
- 统一了脚本中的消息输出格式和样式
This commit is contained in:
2026-07-18 13:40:59 +08:00
parent 82a3f49de8
commit 722c43e323
2 changed files with 116 additions and 68 deletions
+32 -11
View File
@@ -2,6 +2,26 @@
# 目标:下载远程升级脚本、执行、销毁临时文件
set -euo pipefail
if [[ -t 1 ]]; then
RED='\033[31m'
YELLOW='\033[33m'
CYAN='\033[36m'
NC='\033[0m'
else
RED=''
YELLOW=''
CYAN=''
NC=''
fi
print_info() {
printf '%b%s%b\n' "$CYAN" "$*" "$NC"
}
print_error() {
printf '%bError:%b %s\n' "$RED" "$NC" "$*" >&2
}
REMOTE="https://git.orionc.me/orion/script/raw/branch/main/homebrew/brew-upgrade-manager.sh"
TEMP_DIR="$(mktemp -d "${TMPDIR:-/tmp}/brew-upgrade-manager.XXXXXX")"
TEMP="$TEMP_DIR/brew-upgrade-manager.sh"
@@ -43,7 +63,7 @@ if curl --help all 2>/dev/null | grep -q -- '--retry-all-errors'; then
curl_retry_all_errors+=(--retry-all-errors)
fi
echo "正在下载远程脚本..."
print_info "正在下载远程脚本..."
curl -f -sSL \
--connect-timeout "$connect_timeout" \
--speed-limit 1024 \
@@ -52,16 +72,16 @@ curl -f -sSL \
--retry-delay "$download_retry_delay" \
"${curl_retry_all_errors[@]}" \
"$REMOTE" -o "$TEMP"
[[ -s "$TEMP" ]] || { echo "远程脚本为空,已停止执行。" >&2; exit 1; }
[[ -s "$TEMP" ]] || { print_error "远程脚本为空,已停止执行。"; exit 1; }
if [[ -n "${BREWUP_SHA256:-}" ]]; then
echo "正在校验脚本 SHA256..."
print_info "正在校验脚本 SHA256..."
actual_sha256="$(shasum -a 256 "$TEMP")"
actual_sha256="${actual_sha256%% *}"
if [[ "$actual_sha256" != "$BREWUP_SHA256" ]]; then
echo "脚本 SHA256 不匹配,已停止执行。" >&2
echo "Expected: $BREWUP_SHA256" >&2
echo "Actual: $actual_sha256" >&2
print_error "脚本 SHA256 不匹配,已停止执行。"
printf '%bExpected:%b %s\n' "$YELLOW" "$NC" "$BREWUP_SHA256" >&2
printf '%bActual:%b %s\n' "$RED" "$NC" "$actual_sha256" >&2
exit 1
fi
fi
@@ -69,7 +89,7 @@ fi
bash -n "$TEMP"
if [[ "${BREWUP_DEBUG:-0}" == "1" ]]; then
echo "Downloaded script first line:"
print_info "Downloaded script first line:"
head -n 1 "$TEMP"
fi
@@ -86,17 +106,18 @@ EOF
export BREWUP_KEYCHAIN_ACCOUNT="$CURRENT_USER"
if ! /usr/bin/security find-generic-password -a "$CURRENT_USER" -s "$KEYCHAIN_SERVICE" -w >/dev/null 2>&1; then
printf "首次使用:请输入一次 sudo 密码,将保存到 macOS Keychain"
printf '%b首次使用:请输入一次 sudo 密码,将保存到 macOS Keychain%b' "$YELLOW" "$NC"
IFS= read -r -s BREWUP_SUDO_PASSWORD
printf '\n'
/usr/bin/security add-generic-password -U -a "$CURRENT_USER" -s "$KEYCHAIN_SERVICE" -w "$BREWUP_SUDO_PASSWORD" >/dev/null
unset BREWUP_SUDO_PASSWORD
fi
echo "正在通过 Keychain 准备 sudo 凭据..."
print_info "正在通过 Keychain 准备 sudo 凭据..."
if ! sudo -A -v; then
echo "Keychain 中的 sudo 密码不可用,请删除后重新保存:" >&2
echo " security delete-generic-password -a \"$CURRENT_USER\" -s \"$KEYCHAIN_SERVICE\"" >&2
print_error "Keychain 中的 sudo 密码不可用,请删除后重新保存:"
printf ' %bsecurity delete-generic-password -a %q -s %q%b\n' \
"$CYAN" "$CURRENT_USER" "$KEYCHAIN_SERVICE" "$NC" >&2
exit 1
fi
}