diff --git a/ai/hwaishell.sh b/ai/hwaishell.sh index c6de670..e746f1a 100644 --- a/ai/hwaishell.sh +++ b/ai/hwaishell.sh @@ -13,7 +13,31 @@ 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}"; } -# 检查是否有 systemd +# 检测是否在管道中运行(stdin 不是 tty) +is_piped() { + [ ! -t 0 ] +} + +# 交互式读取或自动使用默认值 +read_or_default() { + local prompt_msg="$1" + local default_value="$2" + local var_name="$3" + + if is_piped; then + # 管道模式:检查环境变量,否则使用默认值 + local env_val="${!var_name}" + if [ -n "$env_val" ]; then + echo "$env_val" + else + echo "$default_value" + fi + else + # 交互模式:正常 read + read -p "$prompt_msg" input_val + echo "${input_val:-$default_value}" + fi +} has_systemd() { [ -d /run/systemd/system ] || [ -d /var/run/systemd/system ] || systemctl --version &>/dev/null } @@ -89,8 +113,7 @@ fi log_step "1/5" "正在检测 frpc 环境..." if ! command -v frpc &>/dev/null && [ ! -f "/usr/local/bin/frpc" ] && [ ! -f "/usr/bin/frpc" ]; then log_warn "未检测到 frpc!" - read -p "是否需要为您自动下载并安装最新版 frpc (使用国内加速镜像)? (y/n, 默认 y): " INSTALL_FRP - INSTALL_FRP=${INSTALL_FRP:-y} + INSTALL_FRP=$(read_or_default "是否需要为您自动下载并安装最新版 frpc (使用国内加速镜像)? (y/n, 默认 y): " "y" "INSTALL_FRP") if [[ "$INSTALL_FRP" == "y" || "$INSTALL_FRP" == "Y" ]]; then ARCH=$(uname -m) @@ -177,11 +200,9 @@ fi # ================= 配置网关与映射端口 ================= log_step "2/5" "配置动态网关参数:" -read -p "请输入 Python 动态网关的本地监听端口 (默认 8080): " GATEWAY_PORT -GATEWAY_PORT=${GATEWAY_PORT:-8080} -read -p "请输入你想在 frps 公网端暴露的端口 (默认 18000): " REMOTE_PORT -REMOTE_PORT=${REMOTE_PORT:-18000} +GATEWAY_PORT=$(read_or_default "请输入 Python 动态网关的本地监听端口 (默认 8080): " "8080" "GATEWAY_PORT") +REMOTE_PORT=$(read_or_default "请输入你想在 frps 公网端暴露的端口 (默认 18000): " "18000" "REMOTE_PORT") # 端口有效性检查 if ! [[ "$GATEWAY_PORT" =~ ^[0-9]+$ ]] || [ "$GATEWAY_PORT" -lt 1 ] || [ "$GATEWAY_PORT" -gt 65535 ]; then @@ -219,8 +240,7 @@ fi APPEND_FRP="n" if [ -n "$FRPC_CONFIG" ]; then log_info "识别到 frpc 配置: $FRPC_CONFIG (${FRPC_TYPE})" - read -p "是否自动将华为云转发规则追加到该文件? (y/n, 默认 y): " APPEND_FRP - APPEND_FRP=${APPEND_FRP:-y} + APPEND_FRP=$(read_or_default "是否自动将华为云转发规则追加到该文件? (y/n, 默认 y): " "y" "APPEND_FRP") else log_warn "未找到 frpc 配置文件,跳过自动追加" log_warn "请手动在 frpc 配置中添加以下规则:" @@ -272,8 +292,7 @@ fi USE_VENV=false VENV_PATH="/opt/huawei-gateway/venv" if [ "$IS_CONTAINER" = true ] || [ "$EUID" -eq 0 ]; then - read -p "是否使用虚拟环境安装 Python 依赖? (推荐, y/n, 默认 y): " USE_VENV_INPUT - USE_VENV_INPUT=${USE_VENV_INPUT:-y} + USE_VENV_INPUT=$(read_or_default "是否使用虚拟环境安装 Python 依赖? (推荐, y/n, 默认 y): " "y" "USE_VENV") [[ "$USE_VENV_INPUT" == "y" || "$USE_VENV_INPUT" == "Y" ]] && USE_VENV=true fi