fix(homebrew): 修复 Homebrew 伪终端输入和输出处理问题
- 在 colorize_line 函数中处理光标控制序列,避免它们破坏版本着色 - 添加 run_brew_in_pseudoterminal 函数,从控制终端读取输入而不是关闭的管道 - 将主脚本通过 curl 管道启动时的输入重定向到 /dev/tty - 修复启动器中 sudo 密码读取时的输入源问题 - 更新文档说明启动器如何处理 curl 管道输入和确认提示
This commit is contained in:
@@ -107,7 +107,11 @@ EOF
|
||||
|
||||
if ! /usr/bin/security find-generic-password -a "$CURRENT_USER" -s "$KEYCHAIN_SERVICE" -w >/dev/null 2>&1; then
|
||||
printf '%b首次使用:请输入一次 sudo 密码,将保存到 macOS Keychain:%b' "$YELLOW" "$NC"
|
||||
IFS= read -r -s BREWUP_SUDO_PASSWORD
|
||||
if [[ -r /dev/tty ]]; then
|
||||
IFS= read -r -s BREWUP_SUDO_PASSWORD < /dev/tty
|
||||
else
|
||||
IFS= read -r -s BREWUP_SUDO_PASSWORD
|
||||
fi
|
||||
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
|
||||
@@ -125,4 +129,10 @@ EOF
|
||||
setup_sudo_askpass
|
||||
|
||||
export COLUMNS="${COLUMNS:-130}"
|
||||
bash "$TEMP" "$@"
|
||||
if [[ -r /dev/tty ]]; then
|
||||
# 启动器是通过 curl 管道执行时,不让主脚本继承已关闭的管道输入。
|
||||
# 这样 Homebrew 的确认提示和 script(1) 的伪终端都能从当前终端正常读取输入。
|
||||
bash "$TEMP" "$@" < /dev/tty
|
||||
else
|
||||
bash "$TEMP" "$@"
|
||||
fi
|
||||
|
||||
Reference in New Issue
Block a user