如何编写Shell Script检查TS文件变量值,构建前校验不符合则报错退出
原脚本失效原因
- 文件路径不匹配:原脚本读取的是
App/env/index.tsx,你实际使用的配置文件是env.ts,路径不一致导致读取不到目标变量 - 行号硬编码不合理:你实际的
env.ts第一行为注释内容,SDK构建变量定义在第二行,原脚本直接取前两行切割,拿到的是注释行的内容,无法匹配到目标变量 - 字段切割逻辑脆弱:硬编码取空格分隔后的第5个字段,一旦代码中出现多空格、制表符、格式调整,就会拿到错误的值
正确实现方案
推荐用grep精准匹配变量名,避免硬编码行号和字段位置,适配性更强:
#!/bin/bash # 按需修改以下两个配置项即可 ENV_FILE="./env.ts" TARGET_VAR="SDK_BUILD" # 精准提取目标变量的值 VAR_VAL=$(grep "^export const ${TARGET_VAR}" "${ENV_FILE}" | awk -F'[ =]' '{print $NF}' | tr -d '[:space:]') # 变量为false时终止构建 if [[ "${VAR_VAL}" = "false" ]]; then echo "Error! 请将${ENV_FILE}中的${TARGET_VAR}设置为true后再构建" 1>&2 exit 64 fi
脚本逻辑说明:
- grep自动过滤注释行、其他变量行,精准匹配目标变量的定义行
- awk同时按空格和等号做分隔,直接取最后一个字段的值,不受中间空格数量的影响
- tr清除所有空白字符,避免换行、多余空格干扰判断结果
可选增强校验
可以增加配置文件存在性判断,避免配置文件丢失导致的逻辑异常,在提取变量值前加入以下代码即可:
if [[ ! -f "${ENV_FILE}" ]]; then echo "Error! 配置文件${ENV_FILE}不存在" 1>&2 exit 65 fi
内容的提问来源于stack exchange,提问作者Alwaysblue
相关产品推荐
相关产品推荐

