修复管道模式:FRPS_ADDR 检查移到主线避免子shell exit无效
- 删除 read_required() 函数(子shell exit 无法终止主脚本) - FRPS_ADDR 检查直接放在主线 if/else 中 - 管道模式下缺少 FRPS_ADDR 正确 exit 1 终止脚本 - 交互模式下 while 循环确保必填项非空
This commit is contained in:
+21
-33
@@ -13,34 +13,6 @@ log_warn() { echo -e "${YELLOW}[WARN]${PLAIN} $1"; }
|
||||
log_error() { echo -e "${RED}[ERROR]${PLAIN} $1"; }
|
||||
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() {
|
||||
local prompt_msg="$1"
|
||||
@@ -245,12 +217,28 @@ fi
|
||||
# ================= 配置网关与 frpc 代理参数 =================
|
||||
log_step "2/5" "配置 frpc 连接与网关端口参数:"
|
||||
|
||||
# frps 服务器连接信息(必填)
|
||||
FRPS_ADDR="${FRPS_ADDR:-$(read_required "请输入 frps 服务器地址 (例: 1.2.3.4): " "FRPS_ADDR")}"
|
||||
FRPS_PORT="${FRPS_PORT:-$(read_or_default "请输入 frps 服务器端口 (默认 7000): " "7000")}"
|
||||
FRPS_TOKEN="${FRPS_TOKEN:-$(read_or_default "请输入 frps 认证 token (默认留空): " "")}"
|
||||
# frps 服务器连接信息(必填 —— 管道模式下必须通过环境变量提供)
|
||||
if [ -t 0 ]; then
|
||||
# 交互模式
|
||||
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")}"
|
||||
GATEWAY_PORT="${GATEWAY_PORT:-$(read_or_default "请输入 Python 动态网关的本地监听端口 (默认 8080): " "8080")}"
|
||||
REMOTE_PORT="${REMOTE_PORT:-$(read_or_default "请输入在 frps 公网端暴露的端口 (默认 18000): " "18000")}"
|
||||
|
||||
Reference in New Issue
Block a user