103 lines
3.1 KiB
Bash
Executable File
103 lines
3.1 KiB
Bash
Executable File
#!/usr/bin/env bash
|
||
# 完整卸载豆包(App + 浏览器 + 输入法 + 用户数据 + TCC)
|
||
# 用法:bash doubao_uninstall_full.sh
|
||
set -euo pipefail
|
||
|
||
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
||
KARUO_SUDO="${SCRIPT_DIR}/karuo_sudo.sh"
|
||
HOME_LIB="$HOME/Library"
|
||
|
||
echo "==> 1/5 退出豆包相关进程"
|
||
osascript -e 'tell application "Doubao" to quit' 2>/dev/null || true
|
||
osascript -e 'tell application "豆包" to quit' 2>/dev/null || true
|
||
sleep 2
|
||
for proc in Doubao "Doubao Browser" DoubaoIme DoubaoImeSettings DoubaoImeInstaller; do
|
||
killall "$proc" 2>/dev/null || true
|
||
done
|
||
sleep 1
|
||
|
||
echo "==> 2/5 解除不可变标志(Remote_State 等)"
|
||
if [[ -d "$HOME_LIB/Application Support/Doubao" ]]; then
|
||
while IFS= read -r -d '' f; do
|
||
chflags nouchg "$f" 2>/dev/null || true
|
||
done < <(find "$HOME_LIB/Application Support/Doubao" -flags uchg -print0 2>/dev/null)
|
||
fi
|
||
|
||
echo "==> 3/5 删除应用"
|
||
for app in \
|
||
"/Applications/doubao.app" \
|
||
"/Applications/Doubao.app" \
|
||
"/Applications/豆包.app" \
|
||
"/Applications/豆包浏览器.app" \
|
||
"/Library/Input Methods/DoubaoIme.app"; do
|
||
if [[ -e "$app" ]]; then
|
||
if [[ "$app" == /Library/* ]] && [[ -x "$KARUO_SUDO" ]]; then
|
||
"$KARUO_SUDO" /bin/rm -rf "$app"
|
||
else
|
||
rm -rf "$app"
|
||
fi
|
||
echo "removed: $app"
|
||
fi
|
||
done
|
||
|
||
echo "==> 4/5 删除用户数据"
|
||
paths=(
|
||
"$HOME_LIB/Application Support/Doubao"
|
||
"$HOME_LIB/Application Support/DoubaoIme"
|
||
"$HOME_LIB/Application Support/Doubao Browser"
|
||
"$HOME_LIB/Caches/Doubao"
|
||
"$HOME_LIB/Caches/com.bot.pc.doubao"
|
||
"$HOME_LIB/Caches/com.bot.pc.doubao.browser"
|
||
"$HOME_LIB/HTTPStorages/com.bot.pc.doubao"
|
||
"$HOME_LIB/HTTPStorages/com.bot.pc.doubao.browser"
|
||
"$HOME_LIB/Containers/com.bot.pc.doubao.FinderSyncExtension"
|
||
"$HOME_LIB/Application Scripts/com.bot.pc.doubao.FinderSyncExtension"
|
||
"$HOME_LIB/Saved Application State/com.bot.pc.doubao.savedState"
|
||
"$HOME_LIB/Saved Application State/com.bot.pc.doubao.browser.savedState"
|
||
"$HOME_LIB/Logs/Doubao"
|
||
"$HOME_LIB/Logs/Doubao Browser"
|
||
)
|
||
for p in "${paths[@]}"; do
|
||
if [[ -e "$p" ]]; then
|
||
rm -rf "$p"
|
||
echo "removed: $p"
|
||
fi
|
||
done
|
||
rm -f "$HOME_LIB/Preferences/com.bot.pc.doubao"*.plist 2>/dev/null || true
|
||
rm -f "$HOME_LIB/Preferences/com.bytedance.inputmethod.doubaoime.plist" 2>/dev/null || true
|
||
rm -f "$HOME_LIB/Application Support/CrashReporter/Doubao"*.plist 2>/dev/null || true
|
||
rm -rf "$HOME_LIB/HTTPStorages/com.bytedance.inputmethod.doubaoime"* 2>/dev/null || true
|
||
|
||
echo "==> 5/5 重置 TCC 权限"
|
||
for bid in \
|
||
com.bot.pc.doubao \
|
||
com.bot.pc.doubao.browser \
|
||
com.bot.pc.doubao.helper \
|
||
com.bot.pc.doubao.browser.helper \
|
||
com.bytedance.inputmethod.doubaoime; do
|
||
tccutil reset All "$bid" 2>/dev/null || true
|
||
done
|
||
|
||
echo ""
|
||
echo "==> 验收"
|
||
fail=0
|
||
for check in \
|
||
"/Applications/doubao.app" \
|
||
"$HOME_LIB/Application Support/Doubao"; do
|
||
if [[ -e "$check" ]]; then
|
||
echo "❌ 仍在: $check"
|
||
fail=1
|
||
fi
|
||
done
|
||
if pgrep -lf -i doubao >/dev/null 2>&1; then
|
||
echo "❌ 仍有豆包进程:"
|
||
pgrep -lf -i doubao || true
|
||
fail=1
|
||
fi
|
||
if [[ "$fail" -eq 0 ]]; then
|
||
echo "✅ 豆包已完整卸载(App + 数据 + TCC)"
|
||
else
|
||
echo "⚠️ 部分残留,见上方"
|
||
exit 1
|
||
fi
|