#!/usr/bin/env bash # 把 ~/ros2/config/site.yaml 加载成 `SITE_*` 环境变量。 # 用法(在其它脚本里): # source "${ROOT}/scripts/lib/load_site_config.sh" # # 本文件同时负责**在配置有问题时立刻拦下**,因为它的调用方几乎都是 # `eval "$(...)"` 或直接引用 `SITE_*`:如果这里不拦,脚本会拿着一堆空变量 # 继续往下跑,真正报错的地方会离原因很远(历史上就这么出过"参数静默失效")。 # # 两种"没配置好"要区别对待: # 1. site.yaml **不存在** —— 新克隆还没 `cp`。给 WARN 就放行, # 因为有些脚本(网络检查、RDK 自检)在配置前就该能用。 # 2. site.yaml **存在但选不出机械臂** —— 配置写错了。直接拦下, # 并且必须给出"改哪个文件的哪个键"。 _SITE_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)" _SITE_EXPORTER="${_SITE_ROOT}/scripts/lib/export_site_env.py" _SITE_FILE="${SITE_CONFIG:-${_SITE_ROOT}/config/site.yaml}" # 供调用方判断"是没配置还是配错了"。0 = 正常加载;1 = 文件不存在;2 = 配置有误。 SITE_LOAD_STATUS=0 if [[ ! -f "${_SITE_FILE}" ]]; then echo "[site] WARN: 没有 ${_SITE_FILE}(新克隆请先 cp config/site.example.yaml config/site.yaml)" >&2 SITE_LOAD_STATUS=1 else _site_env="" if ! _site_env="$(python3 "${_SITE_EXPORTER}" --config "${_SITE_FILE}")"; then echo "[site] ERROR: 解析 ${_SITE_FILE} 失败,见上面 export_site_env.py 的报错。" >&2 echo "[site] 修好后重试;不要带着空的 SITE_* 继续跑。" >&2 SITE_LOAD_STATUS=2 else # shellcheck disable=SC1090 eval "${_site_env}" export SITE_CONFIG="${_SITE_FILE}" if [[ -z "${SITE_ROBOT_SN:-}" ]]; then # 绝不兜底成某个 SN:那等于"配置漏了照样启动,连的是哪台看运气"。 echo "[site] ERROR: ${_SITE_FILE} 里没有选出机械臂(robot.sn 为空且没有 --arm)。" >&2 echo "[site] 在 config/site.yaml 的 robot.sn 里填完整 SN," >&2 echo "[site] 或给命令加 --arm <臂号>(臂号 = 该臂 SN 的末两位)。" >&2 SITE_LOAD_STATUS=2 else # 把 89/91/left/right 别名解析成完整的 Flexiv SN,供 RDK 使用。 export ROBOT_SN="${SITE_ROBOT_SN}" fi fi fi unset _SITE_ROOT _SITE_EXPORTER _SITE_FILE _site_env