diff --git a/lib/env_check.sh b/lib/env_check.sh index 41d79a4..10224e9 100644 --- a/lib/env_check.sh +++ b/lib/env_check.sh @@ -156,9 +156,20 @@ SYSCTL } env_check_apply_fixes() { - (( ENV_CHECK_NEED_PACKAGES == 1 )) && { log_info '正在安装缺失软件包...'; _env_install_packages || return 1; } - (( ENV_CHECK_NEED_STORAGE == 1 )) && { log_info '正在创建状态目录...'; mkdir -p "${IPF_STORAGE_DIR}"; chmod 750 "${IPF_STORAGE_DIR}"; } - (( ENV_CHECK_NEED_SYSCTL == 1 )) && { log_info '正在写入 sysctl 配置并启用转发...'; _env_write_sysctl || return 1; } + if (( ENV_CHECK_NEED_PACKAGES == 1 )); then + log_info '正在安装缺失软件包...' + _env_install_packages || return 1 + fi + if (( ENV_CHECK_NEED_STORAGE == 1 )); then + log_info '正在创建状态目录...' + mkdir -p "${IPF_STORAGE_DIR}" + chmod 750 "${IPF_STORAGE_DIR}" + fi + if (( ENV_CHECK_NEED_SYSCTL == 1 )); then + log_info '正在写入 sysctl 配置并启用转发...' + _env_write_sysctl || return 1 + fi + return 0 } env_check_all() { diff --git a/tests/test_env_check.sh b/tests/test_env_check.sh index 4e5c2fd..347354a 100755 --- a/tests/test_env_check.sh +++ b/tests/test_env_check.sh @@ -126,4 +126,19 @@ export IPF_TEST_INPUTS=$'n\n' assert_eq '3' "$(status_of env_check_all)" 'env_check_all should return 3 when user rejects autofix' +# Regression: env_check_apply_fixes must return 0 even when the last flag is 0. +# 之前写成 `(( NEED_SYSCTL == 1 )) && { ... }`,NEED_SYSCTL=0 时函数返回 1, +# 外层 set -e 直接把脚本打死。 +ENV_CHECK_NEED_PACKAGES=1 +ENV_CHECK_NEED_STORAGE=0 +ENV_CHECK_NEED_SYSCTL=0 +assert_eq '0' "$(status_of env_check_apply_fixes)" \ + 'env_check_apply_fixes should return 0 when only some fixes are needed' + +ENV_CHECK_NEED_PACKAGES=0 +ENV_CHECK_NEED_STORAGE=0 +ENV_CHECK_NEED_SYSCTL=0 +assert_eq '0' "$(status_of env_check_apply_fixes)" \ + 'env_check_apply_fixes should return 0 when no fixes are needed' + pass 'test_env_check.sh'