Skip to content

Commit 89ecd13

Browse files
author
ISHAOHAO
committed
fix: 修复了目录错乱的问题
1 parent feee0e5 commit 89ecd13

1 file changed

Lines changed: 221 additions & 32 deletions

File tree

install.sh

Lines changed: 221 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -77,6 +77,33 @@ setup_remote_environment() {
7777
trap 'rm -rf "$TEMP_DIR"' EXIT
7878
}
7979

80+
# 确定项目根目录(必须在加载任何库之前执行)
81+
if is_pipe_execution; then
82+
setup_remote_environment
83+
else
84+
# 本地执行模式:使用脚本所在目录
85+
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
86+
export DEVBOOST_ROOT="$SCRIPT_DIR"
87+
export DEVBOOST_BACKUP_DIR="$DEVBOOST_ROOT/backups"
88+
export DEVBOOST_LOG_DIR="$DEVBOOST_ROOT/logs"
89+
export DEVBOOST_LOG_FILE="$DEVBOOST_LOG_DIR/devboost.log"
90+
export DEVBOOST_MANIFEST="$DEVBOOST_BACKUP_DIR/manifest.txt"
91+
fi
92+
93+
# 现在 DEVBOOST_ROOT 已确定,加载公共库
94+
source "$DEVBOOST_ROOT/lib/common.sh"
95+
96+
# ---------- 全局变量 ----------
97+
AUTO_CONFIRM=false
98+
SPECIFIC_MODULE=""
99+
OPT_MIRROR=""
100+
OPT_PROTOCOL="https"
101+
OPT_BRANCH=""
102+
OPT_COMPONENTS=""
103+
OPT_LANG="en"
104+
OPT_DRY_RUN=false
105+
106+
# ---------- 函数定义 ----------
80107
# 初始化环境(创建目录、检测系统)
81108
init_environment() {
82109
mkdir -p "$DEVBOOST_BACKUP_DIR" "$DEVBOOST_LOG_DIR"
@@ -96,45 +123,208 @@ init_environment() {
96123
log_info "系统信息: OS=$OS_NAME, ENV=$ENV_TYPE, PKG_MGR=$PKG_MANAGER, NETWORK=$NETWORK_STATUS"
97124
}
98125

99-
# 主流程
100-
main() {
101-
# 确定项目根目录
102-
if is_pipe_execution; then
103-
# 远程执行模式:自动下载依赖到临时目录
104-
setup_remote_environment
126+
# 显示主菜单(交互模式)
127+
show_menu() {
128+
echo ""
129+
if [[ "$OPT_LANG" == "zh" ]]; then
130+
echo "========== devboost 优化工具 =========="
131+
else
132+
echo "========== devboost Optimizer =========="
133+
fi
134+
135+
local i=1
136+
local -a module_names=()
137+
local -a module_descs=()
138+
local -a module_descs_zh=()
139+
140+
while IFS='|' read -r name desc zh; do
141+
module_names[$i]="$name"
142+
module_descs[$i]="$desc"
143+
module_descs_zh[$i]="$zh"
144+
if [[ "$OPT_LANG" == "zh" ]]; then
145+
printf "%d. %s\n" "$i" "${zh:-$name}"
146+
else
147+
printf "%d. %s\n" "$i" "${desc:-$name}"
148+
fi
149+
((i++))
150+
done < <(discover_modules)
151+
152+
local module_count=${#module_names[@]}
153+
# 添加“全部执行”选项
154+
echo "$((module_count+1))) $(_echo "Run All" "全部执行")"
155+
# 添加“退出”选项
156+
echo "0) $(_echo "Exit" "退出")"
157+
echo "========================================"
158+
read -rp "$(_echo "Please select [0-$((module_count+1))]: " "请选择 [0-$((module_count+1))]:") " choice
159+
160+
if [[ "$choice" == "0" ]]; then
161+
exit 0
162+
elif [[ "$choice" -le $module_count ]]; then
163+
run_module "${module_names[$choice]}"
164+
elif [[ "$choice" -eq $((module_count+1)) ]]; then
165+
run_all
166+
else
167+
_echo "Invalid choice." "无效选择。"
168+
show_menu
169+
fi
170+
}
171+
172+
# 运行指定模块
173+
run_module() {
174+
local module="$1"
175+
local module_script="$DEVBOOST_ROOT/modules/${module}.sh"
176+
177+
if [[ ! -f "$module_script" ]]; then
178+
log_error "模块脚本不存在: $module_script"
179+
exit 1
180+
fi
181+
182+
log_info "开始运行模块: $module"
183+
184+
# 导出 OPT_* 变量,供模块使用
185+
export OPT_MIRROR OPT_PROTOCOL OPT_BRANCH OPT_COMPONENTS
186+
187+
source "$module_script"
188+
# 每个模块必须实现 run_${module} 函数
189+
if declare -f "run_${module}" >/dev/null; then
190+
"run_${module}"
105191
else
106-
# 本地执行模式:使用脚本所在目录
107-
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
108-
export DEVBOOST_ROOT="$SCRIPT_DIR"
109-
export DEVBOOST_BACKUP_DIR="$DEVBOOST_ROOT/backups"
110-
export DEVBOOST_LOG_DIR="$DEVBOOST_ROOT/logs"
111-
export DEVBOOST_LOG_FILE="$DEVBOOST_LOG_DIR/devboost.log"
112-
export DEVBOOST_MANIFEST="$DEVBOOST_BACKUP_DIR/manifest.txt"
192+
log_error "模块 $module 缺少入口函数 run_${module}"
193+
exit 1
194+
fi
195+
}
196+
197+
# 全部执行
198+
run_all() {
199+
local modules=()
200+
while IFS='|' read -r name desc zh; do
201+
modules+=("$name")
202+
done < <(discover_modules)
203+
204+
if [[ ${#modules[@]} -eq 0 ]]; then
205+
_echo "No modules found to run." "没有找到可运行的模块。"
206+
return
113207
fi
114208

115-
# 加载公共库(现在 DEVBOOST_ROOT 已正确设置)
116-
source "$DEVBOOST_ROOT/lib/common.sh"
209+
for mod in "${modules[@]}"; do
210+
echo ""
211+
if ! confirm "$(_echo "Run $mod optimization?" "是否执行 $mod 优化?")" ; then
212+
log_info "用户跳过模块: $mod"
213+
continue
214+
fi
215+
run_module "$mod"
216+
done
217+
log_info "全部模块执行完毕。"
218+
}
117219

118-
# 全局变量
119-
AUTO_CONFIRM=false
120-
SPECIFIC_MODULE=""
121-
OPT_MIRROR=""
122-
OPT_PROTOCOL="https"
123-
OPT_BRANCH=""
124-
OPT_COMPONENTS=""
125-
OPT_LANG="en"
126-
OPT_DRY_RUN=false
220+
# 回滚操作
221+
rollback() {
222+
source "$DEVBOOST_ROOT/lib/rollback.sh"
223+
perform_rollback
224+
}
127225

128-
# 解析命令行参数(此部分与之前相同,请保留原有解析代码)
129-
# ...(从你提供的代码中复制整个 while 循环和 case 语句到这里)
130-
# 注意:需要确保解析部分在 source common.sh 之后,因为要用到 log_error 等函数
226+
# ---------- 参数解析 ----------
227+
while [[ $# -gt 0 ]]; do
228+
case "$1" in
229+
-y|--yes)
230+
AUTO_CONFIRM=true
231+
shift
232+
;;
233+
--dns)
234+
SPECIFIC_MODULE="dns"
235+
shift
236+
;;
237+
--system-mirror)
238+
SPECIFIC_MODULE="system_mirror"
239+
shift
240+
;;
241+
--devtools-mirror)
242+
SPECIFIC_MODULE="devtools_mirror"
243+
shift
244+
;;
245+
--github)
246+
SPECIFIC_MODULE="github"
247+
shift
248+
;;
249+
--rollback)
250+
SPECIFIC_MODULE="rollback"
251+
shift
252+
;;
253+
--mirror)
254+
if [[ -z "$2" || "$2" == -* ]]; then
255+
echo "错误: --mirror 需要参数"
256+
exit 1
257+
fi
258+
OPT_MIRROR="$2"
259+
shift 2
260+
;;
261+
--protocol)
262+
if [[ -z "$2" || "$2" == -* ]]; then
263+
echo "错误: --protocol 需要参数"
264+
exit 1
265+
fi
266+
OPT_PROTOCOL="$2"
267+
shift 2
268+
;;
269+
--branch)
270+
if [[ -z "$2" || "$2" == -* ]]; then
271+
echo "错误: --branch 需要参数"
272+
exit 1
273+
fi
274+
OPT_BRANCH="$2"
275+
shift 2
276+
;;
277+
--components)
278+
if [[ -z "$2" || "$2" == -* ]]; then
279+
echo "错误: --components 需要参数"
280+
exit 1
281+
fi
282+
OPT_COMPONENTS="$2"
283+
shift 2
284+
;;
285+
--lang)
286+
if [[ -z "$2" || "$2" == -* ]]; then
287+
echo "错误: --lang 需要参数"
288+
exit 1
289+
fi
290+
OPT_LANG="$2"
291+
shift 2
292+
;;
293+
--dry-run)
294+
OPT_DRY_RUN=true
295+
shift
296+
;;
297+
-h|--help)
298+
echo "用法: ./install.sh [选项]"
299+
echo "选项:"
300+
echo " -y, --yes 自动确认所有提示"
301+
echo " --dns 仅运行DNS优化模块"
302+
echo " --system-mirror 仅运行系统镜像优化模块"
303+
echo " --devtools-mirror 仅运行开发工具镜像优化模块"
304+
echo " --github 仅运行GitHub访问优化模块"
305+
echo " --rollback 执行回滚操作"
306+
echo " --mirror <名称/URL> 指定镜像站(如 aliyun, tuna 或直接输入URL)"
307+
echo " --protocol <http|https> 指定协议(默认 https)"
308+
echo " --branch <分支> 指定仓库分支(如 updates, security)"
309+
echo " --components <组件> 指定组件列表(如 main contrib non-free)"
310+
echo " --lang <zh|en> 设置语言(默认 en)"
311+
echo " --dry-run 模拟运行,不实际修改任何文件"
312+
echo " -h, --help 显示此帮助"
313+
exit 0
314+
;;
315+
*)
316+
log_error "未知参数: $1"
317+
exit 1
318+
;;
319+
esac
320+
done
131321

132-
# 初始化环境
322+
# ---------- 主流程 ----------
323+
main() {
133324
init_environment
134325

135326
if [[ "$SPECIFIC_MODULE" == "rollback" ]]; then
136-
source "$DEVBOOST_ROOT/lib/rollback.sh"
137-
perform_rollback
327+
rollback
138328
exit 0
139329
fi
140330

@@ -147,5 +337,4 @@ main() {
147337
log_info "========== devboost 结束 =========="
148338
}
149339

150-
# 启动主流程
151-
main "$@"
340+
main

0 commit comments

Comments
 (0)