本脚本开源,无任何加密混淆
对 Intel 和 Arm 芯片都进行了适配
如何使用?
- 下载下方文件
https://www.mhatp.cn/upload/2023/05/macupdate48tool-d5596053f33147e6b582e35c361712b1.sh - 打开终端 App
输入命令运行
sh ~/Downloads/macupdate48tool-d5596053f33147e6b582e35c361712b1.sh
脚本会自动检测版本号以判断是否需要更新:
若无需更新,自动退出。
若需要更新,脚本会自动下载对应系统的最新版本发行压缩包并解压到临时目录,再移动软件包到系统目录下,再解除隔离标签,最后删除掉临时文件。
由于脚本为您进行了解除隔离标签这一步,所以脚本运行中需要用到您账户的密码(您手动更新时也需要使用到)。
代码:
#!/bin/bash
# 关闭 48tools.app
echo "正在关闭 48tools.app"
osascript -e 'quit app "48tools"'
# 获取当前安装的应用程序版本号
CURRENT_VERSION=$(defaults read /Applications/48tools.app/Contents/Info.plist CFBundleShortVersionString)
echo "当前版本:v$CURRENT_VERSION"
# 检测当前系统版本是arm还是intel,分配不同的下载链接
if [ "$(uname -m)" = "arm64" ]; then
echo "当前系统:arm64"
# 获取最新版本的下载链接
DOWNLOAD_URL=$(curl -s https://api.github.com/repos/duan602728596/48tools/releases/latest \
| grep -o "https://github.com/duan602728596/48tools/releases/download/.*/48tools-.*-mac-arm64.zip")
else
echo "当前系统:intel"
# 获取最新版本的下载链接
DOWNLOAD_URL=$(curl -s https://api.github.com/repos/duan602728596/48tools/releases/latest \
| grep -o "https://github.com/duan602728596/48tools/releases/download/.*/48tools-.*-mac.zip")
fi
echo "正在检查更新..."
# LATEST_VERSION
LATEST_VERSION=$(curl -s https://api.github.com/repos/duan602728596/48tools/releases/latest \
| grep -o '"tag_name": ".*"' \
| sed 's/"//g' \
| sed 's/tag_name: //g')
echo "最新版本:$LATEST_VERSION"
# 检查是否获取到最新版本号
if [ -z "$LATEST_VERSION" ]; then
echo "获取最新版本号失败"
echo "请检查网络连接"
exit 1
fi
# 检查当前版本是否与最新版本相同
if [ "v$CURRENT_VERSION" = "$LATEST_VERSION" ]; then
echo "当前版本已经是最新版本,不需要更新"
# 打开 48tools.app
open /Applications/48tools.app
exit 0
fi
# 设置安装变量
APP_NAME="48tools.app"
DOWNLOAD_PATH="./48toolstmp/48tools.zip"
INSTALL_PATH="/Applications/$APP_NAME"
# 创建临时文件夹
mkdir -p ./48toolstmp
# 下载文件并检查错误
echo "下载链接:$DOWNLOAD_URL"
curl -L "$DOWNLOAD_URL" -o "$DOWNLOAD_PATH"
if [ $? -ne 0 ]; then
echo "下载文件失败"
exit 1
fi
# 解压文件并检查错误
unzip -o "$DOWNLOAD_PATH" -d "./48toolstmp"
if [ $? -ne 0 ]; then
echo "解压文件失败"
exit 1
fi
# mv ./48toolstmp/48tools-*/48tools.app ./48toolstmp/48tools.app
cp -rf ./48toolstmp/48tools-*/48tools.app ./48toolstmp/48tools.app
# 检查应用程序文件是否存在
if [ ! -d "./48toolstmp/$APP_NAME" ]; then
echo "找不到应用程序"
exit 1
fi
# 将应用移到应用程序文件夹
echo "正在移动应用程序..."
# 判断是否存在文件夹,不存在则创建
if [ ! -d "$INSTALL_PATH" ]; then
mkdir -p "$INSTALL_PATH"
fi
# 替换应用程序
rm -rf "$INSTALL_PATH"
mv "./48toolstmp/$APP_NAME" "$INSTALL_PATH"
if [ $? -ne 0 ]; then
echo "移动应用程序失败"
exit 1
fi
# 移除应用程序的隔离标签并检查错误
echo "正在移除隔离标签..."
echo "请在输入密码,以便移除隔离标签,输入完成后按回车键(密码不会显示)"
sudo xattr -r -d com.apple.quarantine "$INSTALL_PATH"
if [ $? -ne 0 ]; then
echo "移除隔离标签失败"
exit 1
fi
echo "正在清理文件..."
# 清理文件
rm -rf ./48toolstmp
if [ $? -ne 0 ]; then
echo "清理文件失败"
exit 1
fi
# 输出更新完成消息
VERSION=$(defaults read "$INSTALL_PATH/Contents/Info.plist" CFBundleShortVersionString)
echo "48tools 已更新到版本 $VERSION"
echo "更新完成,正在重新打开应用程序"
open /Applications/48tools.app
exit 0
# 脚本发布地址 https://www.mhatp.cn/archives/update48tools
License: WTFPL
Todo List
- 加入镜像站功能,便于大陆用户使用
- 对首次安装做出优化
- 自动安装 ffmpeg
- 自动安装 Chrome
- 输出 ffmpeg 路径以及无头浏览器路径以便捷使用