@ -3,24 +3,50 @@
# Version / 版本号
VERSION = "v2.0.0"
# Configuration / 配置
KEEP_BINARY = false
DOWNLOAD_DIR = "/tmp"
INSTALL_DIR = "/usr/local/bin"
AUTO_SUDO = false
# Colors / 颜色
RED = '\033[31m'
GREEN = '\033[32m'
YELLOW = '\033[33m'
BLUE = '\033[36m'
BOLD = '\033[1m'
NC = '\033[0m'
# Separator / 分隔线
SEPARATOR = " ${ BLUE } ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ${ NC } "
# Bilingual message functions / 双语消息函数
error( ) {
echo " ❌ Error: $1 "
echo " ❌ 错误: $2 "
echo -e " \n ${ SEPARATOR } "
echo -e " ${ RED } ${ BOLD } ❌ Error: ${ NC } $1 "
echo -e " ${ RED } ${ BOLD } ❌ 错误: ${ NC } $2 "
echo -e " ${ SEPARATOR } \n "
exit 1
}
info( ) {
echo " ℹ️ $1 "
echo " ℹ️ $2 "
echo -e " \n ${ BLUE } ${ BOLD } ℹ️ [EN]: ${ NC } $1 "
echo -e " ${ BLUE } ${ BOLD } ℹ️ [中文]: ${ NC } $2 \n "
}
success( ) {
echo " ✅ $1 "
echo " ✅ $2 "
echo -e " \n ${ SEPARATOR } "
echo -e " ${ GREEN } ${ BOLD } ✅ [EN]: ${ NC } $1 "
echo -e " ${ GREEN } ${ BOLD } ✅ [中文]: ${ NC } $2 "
echo -e " ${ SEPARATOR } \n "
}
warning( ) {
echo -e " \n ${ YELLOW } ${ BOLD } ⚠️ [EN]: ${ NC } $1 "
echo -e " ${ YELLOW } ${ BOLD } ⚠️ [中文]: ${ NC } $2 \n "
}
# Detect OS and architecture / 检测操作系统和架构
# System detection / 系统检测
detect_platform( ) {
OS = $( uname -s | tr '[:upper:]' '[:lower:]' )
ARCH = $( uname -m)
@ -51,38 +77,51 @@ detect_platform() {
esac
}
# Check system requirements / 检查系统要求
# System checks / 系统检查
check_requirements( ) {
info "Checking system requirements..." "正在检查系统要求..."
# 添加网络连接检查
# Check network connectivity / 检查网络连接
if ! ping -c 1 github.com >/dev/null 2>& 1; then
error "No network connection to GitHub" \
"无法连接到 GitHub"
error "No network connection to GitHub" "无法连接到 GitHub"
fi
# Check curl
# Check curl / 检查curl
if ! command -v curl >/dev/null 2>& 1; then
error "curl is required. Please install curl first." \
"需要安装 curl。请先安装 curl 后再运行此脚本。"
fi
}
# Check write permissions / 检查写入权限
if [ ! -w " $INSTALL_DIR " ] ; then
error " No write permission for $INSTALL_DIR . Please run with sudo. " \
" 没有 $INSTALL_DIR 的写入权限。请使用 sudo 运行此脚本。 "
# Privilege check / 权限检查
check_privileges( ) {
if [ " $EUID " -ne 0 ] ; then
if [ " $AUTO_SUDO " = "true" ] ; then
if command -v sudo >/dev/null 2>& 1; then
info "Re-running with sudo..." "使用 sudo 重新运行..."
exec sudo bash " $0 " " $@ "
else
error "This script must be run as root. Please use sudo." \
"此脚本必须以 root 身份运行。请使用 sudo。"
fi
else
error "This script must be run as root. Please use sudo." \
"此脚本必须以 root 身份运行。请使用 sudo。"
fi
fi
}
# Verify binary / 验证二进制文件
# Binary verification / 二进制验证
verify_binary( ) {
info "Verifying binary..." "正在验证二进制文件..."
# Check file existence / 检查文件是否存在
if [ ! -f " $DOWNLOAD_PATH " ] ; then
error "Binary file download failed or does not exist" \
"二进制文件下载失败或不存在"
fi
# 添加可执行文件格式检查
# Check executable format / 检查可执行格式
if ! file " $DOWNLOAD_PATH " | grep -q "executable" ; then
error "Downloaded file is not an executable" \
"下载的文件不是可执行文件"
@ -91,8 +130,8 @@ verify_binary() {
# Check file size / 检查文件大小
local size = $( wc -c < " $DOWNLOAD_PATH " )
if [ " $size " -lt 1000000 ] ; then # At least 1MB / 至少1MB
error "Downloaded file size is abnormal, download might be incomplete " \
"下载的文件大小异常,可能下载不完整 "
error "Downloaded file size is abnormal" \
"下载的文件大小异常"
fi
# Set executable permissions / 设置可执行权限
@ -102,14 +141,30 @@ verify_binary() {
fi
}
# 在文件开头添加配置项
KEEP_BINARY = true # 修改默认值为 true
DOWNLOAD_DIR = "." # 默认下载到当前目录
# Cleanup functions / 清理函数
cleanup_old_version( ) {
if [ -f " $INSTALL_DIR /cursor-id-modifier " ] ; then
info "Removing old version..." "正在删除旧版..."
rm -f " $INSTALL_DIR /cursor-id-modifier " || \
error "Failed to remove old version" "删除旧版本失败"
fi
}
cleanup_temp_files( ) {
if [ " $KEEP_BINARY " = "false" ] ; then
rm -f " $DOWNLOAD_PATH "
rm -f " $INSTALL_DIR /cursor-id-modifier-wrapper "
fi
}
# 在 main 函数之前添加参数解析
# Parse arguments / 解析参数
parse_args( ) {
while [ [ $# -gt 0 ] ] ; do
case $1 in
--auto-sudo)
AUTO_SUDO = true
shift
; ;
--keep-binary)
KEEP_BINARY = true
shift
@ -125,104 +180,76 @@ parse_args() {
done
}
# Print banner / 打印横幅
print_banner( ) {
echo -e " \n ${ BLUE } ${ BOLD } "
echo " ██████╗██╗ ██╗██████╗ ███████╗ ██████╗ ██████╗"
echo " ██╔════╝██║ ██║██╔══██╗██╔════╝█╔═══██╗██╔══██╗"
echo " ██║ ██║ ██║██████╔╝███████╗██║ ██║██████╔╝"
echo " ██║ ██║ ██║██╔══██╗╚════██ ██║ ██║██╔══██╗"
echo " ╚██████╗╚██████╔╝██║ ██║███████║╚██████╔╝██║ ██║"
echo " ╚════╝ ╚═════╝ ╚═╝ ╚═╝╚══════╝ ╚════╝ ╚═╝ ╚═╝"
echo -e " ${ NC } "
echo -e " ${ YELLOW } ${ BOLD } >> Cursor ID Modifier ${ VERSION } << ${ NC } "
echo -e " ${ BLUE } ${ BOLD } [ By Pancake Fruit Rolled Shark Chili ] ${ NC } \n "
}
# Main installation process / 主安装流程
main( ) {
check_privileges " $@ "
print_banner
info " Starting installation of cursor-id-modifier ${ VERSION } ... " \
" 开始安装 cursor-id-modifier ${ VERSION } ... "
# Initialize installation / 初始化安装
detect_platform
INSTALL_DIR = "/usr/local/bin"
if [ ! -d " $INSTALL_DIR " ] ; then
if ! mkdir -p " $INSTALL_DIR " 2>/dev/null; then
error "Failed to create installation directory" \
"无法创建安装目录"
fi
fi
# Check requirements / 检查要求
check_requirements
# Create temp directory / 创建临时目录
info "Creating temporary directory..." \
"正在创建临时目录..."
TEMP_DIR = $( mktemp -d)
info "Note: Temporary directory will be automatically cleaned up after installation" \
"注意:临时目录将在安装完成后自动清理"
trap 'rm -rf "$TEMP_DIR"' EXIT
# 检查下载目录权限
if [ ! -w " $DOWNLOAD_DIR " ] ; then
error " No write permission for download directory: $DOWNLOAD_DIR " \
" 下载目录无写入权限: $DOWNLOAD_DIR "
fi
# Create installation directory / 创建安装目录
mkdir -p " $INSTALL_DIR " 2>/dev/null || \
error "Failed to create installation directory" "无法创建安装目录"
# 下载二进制文件
# Download binary / 下载二进制文件
info " Downloading cursor-id-modifier ( $OS - $ARCH )... " \
" 正在下载 cursor-id-modifier ( $OS - $ARCH )... "
# 定义下载 URL
DOWNLOAD_URL = " https://github.com/yuaotian/go-cursor-help/raw/refs/heads/master/bin/ $BINARY_NAME "
DOWNLOAD_PATH = " $DOWNLOAD_DIR / $BINARY_NAME "
info " File will be downloaded to: $DOWNLOAD_PATH " \
" 文件将下载到: $DOWNLOAD_PATH "
if ! curl -L --progress-bar " $DOWNLOAD_URL " -o " $DOWNLOAD_PATH " ; then
error " Failed to download binary from: $DOWNLOAD_URL " \
" 从以下地址下载二进制文件失败: $DOWNLOAD_URL "
error "Failed to download binary" "下载二进制文件失败"
fi
success " Download completed to: $DOWNLOAD_PATH " \
" 下载完成,文件位置: $DOWNLOAD_PATH "
# 添加手动设置权限的提示
info "To make the file executable, run:" \
"要使文件可执行,请运行:"
info " chmod +x $DOWNLOAD_PATH " \
" chmod +x $DOWNLOAD_PATH "
info "Then you can run it with:" \
"然后可以通过以下命令运行:"
info " ./ $BINARY_NAME " \
" ./ $BINARY_NAME "
success "Download completed" "下载完成"
# 验证和安装
verify_binary
cleanup_old_version
# 安装到系统目录
# Install binary / 安装二进制文件
info "Installing binary..." "正在安装二进制文件..."
if ! cp " $DOWNLOAD_PATH " " $INSTALL_DIR /cursor-id-modifier " ; then
error "Failed to install binary" "安装二进制文件失败"
fi
# 根据设置决定是否保留下载的文件
if [ " $KEEP_BINARY " = false ] ; then
info "Binary file will be cleaned up after installation" \
"二进制文件将在安装后被清理"
info "Use --keep-binary flag to keep the downloaded file" \
"使用 --keep-binary 参数可以保留下载的文件"
info "Cleaning up downloaded file..." "正在清理下载的文件..."
rm -f " $DOWNLOAD_PATH "
else
info " Binary file is kept at: $DOWNLOAD_PATH " \
" 二进制文件保留在: $DOWNLOAD_PATH "
fi
success "Installation successful! You can now run 'cursor-id-modifier' from anywhere." \
"安装成功!现在可以在任何位置运行 'cursor-id-modifier'。"
success "For help, run 'cursor-id-modifier --help'" \
"如需帮助,请运行 'cursor-id-modifier --help'"
}
cleanup_old_version( ) {
if [ -f " $INSTALL_DIR /cursor-id-modifier " ] ; then
info "Removing old version..." "正在删除旧版..."
rm -f " $INSTALL_DIR /cursor-id-modifier " || \
error "Failed to remove old version" "删除旧版本失败"
fi
# Create wrapper script / 创建包装脚本
cat > " $INSTALL_DIR /cursor-id-modifier-wrapper " << 'EOF'
#!/bin/bash
if [ " $( uname -s) " = "Darwin" ] ; then
sudo /usr/local/bin/cursor-id-modifier " $@ "
else
sudo /usr/local/bin/cursor-id-modifier " $@ "
fi
EOF
chmod +x " $INSTALL_DIR /cursor-id-modifier-wrapper "
# Cleanup / 清理
cleanup_temp_files
success "Installation successful! Run 'cursor-id-modifier-wrapper' from anywhere." \
"安装成功!现在可以在任何位置运行 'cursor-id-modifier-wrapper'。"
}
# 在主程序开始前解析参数
parse_args " $@ "
# Start installation / 开始安装
main
parse_args " $@ "
main " $@ "