修复管道模式:FRPS_ADDR 检查移到主线避免子shell exit无效

- 删除 read_required() 函数(子shell exit 无法终止主脚本)
- FRPS_ADDR 检查直接放在主线 if/else 中
- 管道模式下缺少 FRPS_ADDR 正确 exit 1 终止脚本
- 交互模式下 while 循环确保必填项非空
This commit is contained in:
2026-07-02 15:16:23 +08:00
parent 209d7eb6e8
commit f297b7adf4
+21 -33
View File
@@ -13,34 +13,6 @@ log_warn() { echo -e "${YELLOW}[WARN]${PLAIN} $1"; }
log_error() { echo -e "${RED}[ERROR]${PLAIN} $1"; } log_error() { echo -e "${RED}[ERROR]${PLAIN} $1"; }
log_step() { echo -e "\n${BLUE}[${1}]${PLAIN} ${2}"; } log_step() { echo -e "\n${BLUE}[${1}]${PLAIN} ${2}"; }
# 交互式读取,必须提供非空值;管道模式下要求环境变量
read_required() {
local prompt_msg="$1"
local var_name="$2"
if [ -t 0 ]; then
local val
while true; do
read -p "$prompt_msg" val
if [ -n "$val" ]; then
echo "$val"
return 0
fi
echo -e "${RED}此项为必填,请输入!${PLAIN}"
done
else
# 管道模式:从环境变量取,没有则报错提示改为交互式执行
local env_val="${!var_name}"
if [ -n "$env_val" ]; then
echo "$env_val"
else
log_error "管道模式下参数 $var_name 未通过环境变量提供"
log_error "请改为交互式执行: curl -sSL -o hwaishell.sh <url> && bash hwaishell.sh"
exit 1
fi
fi
}
# 交互式读取,有默认值可选 # 交互式读取,有默认值可选
read_or_default() { read_or_default() {
local prompt_msg="$1" local prompt_msg="$1"
@@ -245,12 +217,28 @@ fi
# ================= 配置网关与 frpc 代理参数 ================= # ================= 配置网关与 frpc 代理参数 =================
log_step "2/5" "配置 frpc 连接与网关端口参数:" log_step "2/5" "配置 frpc 连接与网关端口参数:"
# frps 服务器连接信息(必填) # frps 服务器连接信息(必填 —— 管道模式下必须通过环境变量提供
FRPS_ADDR="${FRPS_ADDR:-$(read_required "请输入 frps 服务器地址 (例: 1.2.3.4): " "FRPS_ADDR")}" if [ -t 0 ]; then
FRPS_PORT="${FRPS_PORT:-$(read_or_default "请输入 frps 服务器端口 (默认 7000): " "7000")}" # 交互模式
FRPS_TOKEN="${FRPS_TOKEN:-$(read_or_default "请输入 frps 认证 token (默认留空): " "")}" while [ -z "$FRPS_ADDR" ]; do
read -p "请输入 frps 服务器地址 (例: 1.2.3.4): " FRPS_ADDR
[ -z "$FRPS_ADDR" ] && log_error "此项为必填,请输入!"
done
read -p "请输入 frps 服务器端口 (默认 7000): " FRPS_PORT
FRPS_PORT=${FRPS_PORT:-7000}
read -p "请输入 frps 认证 token (默认留空): " FRPS_TOKEN
else
# 管道模式:必须通过环境变量提供关键参数
if [ -z "$FRPS_ADDR" ]; then
log_error "管道模式下必须通过环境变量提供参数!"
log_error "用法: FRPS_ADDR=1.2.3.4 FRPS_PORT=7000 FRPS_TOKEN=xxx curl -sSL ... | bash"
log_error "或下载后交互式: curl -sSL -o hwaishell.sh <url> && bash hwaishell.sh"
exit 1
fi
FRPS_PORT=${FRPS_PORT:-7000}
FRPS_TOKEN=${FRPS_TOKEN:-}
fi
# 代理规则
PROXY_NAME="${PROXY_NAME:-$(read_or_default "请输入代理名称 (默认 huawei-dynamic-gateway): " "huawei-dynamic-gateway")}" PROXY_NAME="${PROXY_NAME:-$(read_or_default "请输入代理名称 (默认 huawei-dynamic-gateway): " "huawei-dynamic-gateway")}"
GATEWAY_PORT="${GATEWAY_PORT:-$(read_or_default "请输入 Python 动态网关的本地监听端口 (默认 8080): " "8080")}" GATEWAY_PORT="${GATEWAY_PORT:-$(read_or_default "请输入 Python 动态网关的本地监听端口 (默认 8080): " "8080")}"
REMOTE_PORT="${REMOTE_PORT:-$(read_or_default "请输入在 frps 公网端暴露的端口 (默认 18000): " "18000")}" REMOTE_PORT="${REMOTE_PORT:-$(read_or_default "请输入在 frps 公网端暴露的端口 (默认 18000): " "18000")}"