You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在Bash脚本中读取YAML文件并以YAML值为参数执行命令

解决Swagger API生成脚本的curl格式错误问题

问题根源

原脚本用while IFS=: read -r key value的方式读取YAML文件,完全适配不了YAML的层级缩进结构,导致读取到的URL内容混乱、甚至为空,直接触发curl的URL using bad/illegal format错误。Bash原生不具备解析YAML的能力,必须借助专门的YAML处理工具。

解决方案:使用yq解析YAML

yq是一款轻量的YAML命令行处理工具,能精准提取YAML中的层级数据。先确保已安装yq:

  • Debian/Ubuntu:sudo apt install yq
  • macOS:brew install yq

修正后的完整脚本

#!/bin/bash

# 检查yq是否安装
if ! command -v yq &> /dev/null; then
    echo "错误:未找到yq,请先安装yq工具"
    exit 1
fi

# 获取YAML中的所有顶级节点名称
top_nodes=$(yq eval 'keys | .[]' ./swagger-codegen.yaml)

for top_node in $top_nodes; do
    # 提取当前节点对应的URL
    swagger_url=$(yq eval ".$top_node.url" ./swagger-codegen.yaml)
    
    json_path="${top_node}-swagger.json"
    api_ts="${top_node}Api.ts"

    # 下载Swagger JSON文件
    if curl -k "$swagger_url" -o "$json_path"; then
        echo "已下载 $top_node 的Swagger JSON文件"
        # 生成TypeScript API文件
        if npx swagger-typescript-api -p "$json_path" -n "$api_ts"; then
            echo "已生成 $top_node 的TypeScript API文件"
        else
            echo "生成 $top_node API文件失败"
        fi
    else
        echo "下载 $top_node 的Swagger JSON文件失败"
    fi
done

脚本说明

  1. yq依赖检查:先确认yq已安装,避免后续执行失败
  2. 提取顶级节点:用yq eval 'keys | .[]'获取YAML中所有顶级键名(如dbaas、flavor-access)
  3. 提取URL:通过yq eval ".$top_node.url"精准提取每个节点下的url值
  4. 流程控制:给curl和npx命令添加判断,执行失败时给出明确提示
  5. 格式兼容:完全适配YAML的层级结构,不会出现URL读取错误的情况

内容的提问来源于stack exchange,提问作者mTv

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:51:10