问题描述
install.sh 当前对交互终端和 PATH 的假设比较强,在 macOS + Homebrew Node 的常见场景下容易直接失败:
- 如果 Node.js 是通过 Homebrew 安装在
/opt/homebrew/bin/node,但执行脚本的环境没有把 /opt/homebrew/bin 带进 PATH,脚本会误判为“未检测到 Node.js”。
- 一旦进入交互分支,脚本会通过
/dev/tty 读取输入;在无 TTY 的执行环境(例如某些 agent/launcher/非登录 shell)里会直接报错退出。
- 即使 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 环境 这一组仍可稳定复现的场景。
问题描述
install.sh当前对交互终端和PATH的假设比较强,在 macOS + Homebrew Node 的常见场景下容易直接失败:/opt/homebrew/bin/node,但执行脚本的环境没有把/opt/homebrew/bin带进PATH,脚本会误判为“未检测到 Node.js”。/dev/tty读取输入;在无 TTY 的执行环境(例如某些 agent/launcher/非登录 shell)里会直接报错退出。所以目前的问题不是仓库本身无法手动安装,而是 一键脚本对 PATH / TTY 的健壮性不足。
复现环境
/opt/homebrew/bin/nodeinstall.sh来自当前main复现 1:Homebrew Node 未进入 PATH 时误判未安装 Node
输出:
复现 2:Node 可见,但无 TTY 时仍然直接崩溃
输出:
实际结果
脚本在无 TTY 环境下直接退出,无法继续安装;如果
/opt/homebrew/bin不在PATH,还会先误判系统没有安装 Node。期望结果
/opt/homebrew/bin/node)。read < /dev/tty处直接崩溃。补充
手动安装路径是可行的(拉代码后手动安装依赖并构建可以成功),所以这更像是安装脚本健壮性问题,而不是项目本身无法安装。
另外,之前的 #14 已经处理过一轮
curl | bash相关问题;这个 issue 关注的是 Homebrew PATH 检测 + 无 TTY 环境 这一组仍可稳定复现的场景。