@@ -25,7 +25,6 @@ REQUIRED_MODULES=(
2525
2626# 判断是否在管道执行(远程模式)
2727is_pipe_execution () {
28- # 如果 $0 包含 /dev/fd/ 或标准输入不是终端,则认为是在管道执行
2928 [[ " $0 " == * " /dev/fd/" * ]] || [[ ! -t 0 ]]
3029}
3130
@@ -46,42 +45,36 @@ download_file() {
4645# 远程模式:创建临时目录并下载所有必要文件
4746setup_remote_environment () {
4847 echo " 检测到远程执行模式,正在准备环境..."
49- # 创建临时目录
5048 TEMP_DIR=$( mktemp -d -t devboost.XXXXXX)
5149 export DEVBOOST_ROOT=" $TEMP_DIR "
5250 export DEVBOOST_BACKUP_DIR=" $TEMP_DIR /backups"
5351 export DEVBOOST_LOG_DIR=" $TEMP_DIR /logs"
5452 export DEVBOOST_LOG_FILE=" $DEVBOOST_LOG_DIR /devboost.log"
5553 export DEVBOOST_MANIFEST=" $DEVBOOST_BACKUP_DIR /manifest.txt"
5654
57- # 创建必要的子目录
5855 mkdir -p " $DEVBOOST_ROOT /lib" " $DEVBOOST_ROOT /modules" \
5956 " $DEVBOOST_BACKUP_DIR " " $DEVBOOST_LOG_DIR "
6057
61- # 下载 lib 文件
6258 for lib in " ${REQUIRED_LIBS[@]} " ; do
6359 local filename=$( basename " $lib " )
6460 echo " 下载 $lib ..."
6561 download_file " $GITHUB_RAW_BASE /$lib " " $DEVBOOST_ROOT /lib/$filename "
6662 done
6763
68- # 下载 modules 文件
6964 for mod in " ${REQUIRED_MODULES[@]} " ; do
7065 local filename=$( basename " $mod " )
7166 echo " 下载 $mod ..."
7267 download_file " $GITHUB_RAW_BASE /$mod " " $DEVBOOST_ROOT /modules/$filename "
7368 done
7469
7570 echo " 环境准备完成,临时目录: $TEMP_DIR "
76- # 注册退出时清理临时目录
7771 trap ' rm -rf "$TEMP_DIR"' EXIT
7872}
7973
80- # 确定项目根目录(必须在加载任何库之前执行)
74+ # 确定项目根目录
8175if is_pipe_execution; then
8276 setup_remote_environment
8377else
84- # 本地执行模式:使用脚本所在目录
8578 SCRIPT_DIR=" $( cd " $( dirname " ${BASH_SOURCE[0]} " ) " && pwd) "
8679 export DEVBOOST_ROOT=" $SCRIPT_DIR "
8780 export DEVBOOST_BACKUP_DIR=" $DEVBOOST_ROOT /backups"
9083 export DEVBOOST_MANIFEST=" $DEVBOOST_BACKUP_DIR /manifest.txt"
9184fi
9285
93- # 现在 DEVBOOST_ROOT 已确定, 加载公共库
86+ # 加载公共库
9487source " $DEVBOOST_ROOT /lib/common.sh"
9588
9689# ---------- 全局变量 ----------
@@ -104,7 +97,20 @@ OPT_LANG="en"
10497OPT_DRY_RUN=false
10598
10699# ---------- 函数定义 ----------
107- # 初始化环境(创建目录、检测系统)
100+
101+ # 询问用户选择语言
102+ ask_language () {
103+ echo " Please select language / 请选择语言:"
104+ echo " 1) English"
105+ echo " 2) 中文"
106+ read -rp " Choice [1-2]: " lang_choice
107+ case " $lang_choice " in
108+ 2) OPT_LANG=" zh" ;;
109+ * ) OPT_LANG=" en" ;;
110+ esac
111+ }
112+
113+ # 初始化环境
108114init_environment () {
109115 mkdir -p " $DEVBOOST_BACKUP_DIR " " $DEVBOOST_LOG_DIR "
110116 touch " $DEVBOOST_LOG_FILE "
@@ -114,16 +120,14 @@ init_environment() {
114120 log_info " 日志文件: $DEVBOOST_LOG_FILE "
115121 log_info " 备份目录: $DEVBOOST_BACKUP_DIR "
116122
117- # 设置语言环境变量(供模块使用)
118123 export DEVBOOST_LANG=" $OPT_LANG "
119124
120- # 加载系统检测结果
121125 source " $DEVBOOST_ROOT /lib/detect.sh"
122126 detect_system
123127 log_info " 系统信息: OS=$OS_NAME , ENV=$ENV_TYPE , PKG_MGR=$PKG_MANAGER , NETWORK=$NETWORK_STATUS "
124128}
125129
126- # 显示主菜单(交互模式)
130+ # 显示主菜单
127131show_menu () {
128132 echo " "
129133 if [[ " $OPT_LANG " == " zh" ]]; then
@@ -150,9 +154,7 @@ show_menu() {
150154 done < <( discover_modules)
151155
152156 local module_count=${# module_names[@]}
153- # 添加“全部执行”选项
154157 echo " $(( module_count+ 1 )) ) $( _echo " Run All" " 全部执行" ) "
155- # 添加“退出”选项
156158 echo " 0) $( _echo " Exit" " 退出" ) "
157159 echo " ========================================"
158160 read -rp " $( _echo " Please select [0-$(( module_count+ 1 )) ]: " " 请选择 [0-$(( module_count+ 1 )) ]:" ) " choice
@@ -181,11 +183,9 @@ run_module() {
181183
182184 log_info " 开始运行模块: $module "
183185
184- # 导出 OPT_* 变量,供模块使用
185186 export OPT_MIRROR OPT_PROTOCOL OPT_BRANCH OPT_COMPONENTS
186187
187188 source " $module_script "
188- # 每个模块必须实现 run_${module} 函数
189189 if declare -f " run_${module} " > /dev/null; then
190190 " run_${module} "
191191 else
@@ -321,6 +321,11 @@ done
321321
322322# ---------- 主流程 ----------
323323main () {
324+ # 交互模式下,如果没有指定语言且非自动确认,则询问语言
325+ if [[ -z " $SPECIFIC_MODULE " && " $OPT_LANG " == " en" && " $AUTO_CONFIRM " == false ]]; then
326+ ask_language
327+ fi
328+
324329 init_environment
325330
326331 if [[ " $SPECIFIC_MODULE " == " rollback" ]]; then
0 commit comments