Skip to content

install.sh 在 Homebrew Node 未进入 PATH / 非 TTY 环境下会直接崩溃 #20

@bendusy

Description

@bendusy

问题描述

install.sh 当前对交互终端和 PATH 的假设比较强,在 macOS + Homebrew Node 的常见场景下容易直接失败:

  1. 如果 Node.js 是通过 Homebrew 安装在 /opt/homebrew/bin/node,但执行脚本的环境没有把 /opt/homebrew/bin 带进 PATH,脚本会误判为“未检测到 Node.js”。
  2. 一旦进入交互分支,脚本会通过 /dev/tty 读取输入;在无 TTY 的执行环境(例如某些 agent/launcher/非登录 shell)里会直接报错退出。
  3. 即使 Node 已经能正常找到,脚本后续的“确认开始安装”提示仍然会因为没有 TTY 而崩溃。

所以目前的问题不是仓库本身无法手动安装,而是 一键脚本对 PATH / TTY 的健壮性不足

复现环境

  • macOS (arm64)
  • Node.js 通过 Homebrew 安装:/opt/homebrew/bin/node
  • install.sh 来自当前 main

复现 1:Homebrew Node 未进入 PATH 时误判未安装 Node

PATH="/usr/bin:/bin:/usr/sbin:/sbin" \
HOME="$HOME" \
CLAWAPP_DIR="$HOME/clawapp-script-test" \
bash ./install.sh

输出:

[✓] Git 2.50.1
[!] 未检测到 Node.js
[!] ClawApp 需要 Node.js 18+ 才能运行
...
[?] 请选择 [1/2]: ./install.sh: line 77: /dev/tty: Device not configured

复现 2:Node 可见,但无 TTY 时仍然直接崩溃

PATH="/opt/homebrew/bin:/usr/bin:/bin:/usr/sbin:/sbin" \
HOME="$HOME" \
CLAWAPP_DIR="$HOME/clawapp-script-test-2" \
bash ./install.sh

输出:

[✓] Git 2.53.0
[✓] Node.js v25.8.0
[✓] OpenClaw Gateway 正在运行 (端口 18789)
[INFO] 安装目录: /.../clawapp-script-test-2
[?] 确认开始安装?[Y/n]: ./install.sh: line 416: /dev/tty: Device not configured

实际结果

脚本在无 TTY 环境下直接退出,无法继续安装;如果 /opt/homebrew/bin 不在 PATH,还会先误判系统没有安装 Node。

期望结果

  • 在判断“未安装 Node.js”之前,能兼容检查常见 Homebrew 路径(例如 /opt/homebrew/bin/node)。
  • 如果当前环境没有 TTY,脚本应尽早给出明确提示并优雅退出,而不是在 read < /dev/tty 处直接崩溃。
  • 更理想的话,可以考虑提供非交互参数(例如跳过确认、通过环境变量传配置)。

补充

手动安装路径是可行的(拉代码后手动安装依赖并构建可以成功),所以这更像是安装脚本健壮性问题,而不是项目本身无法安装。

另外,之前的 #14 已经处理过一轮 curl | bash 相关问题;这个 issue 关注的是 Homebrew PATH 检测 + 无 TTY 环境 这一组仍可稳定复现的场景。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions