如何在 jq 脚本文件的命令中使用环境变量?

提姆巴克

我正在处理大量的 OpenAPI 3.0.0 文件,我需要从中创建 html 页面。每个 OpenAPI 文件都代表大对象模型中的一个实体。Swagger 查看器、redoc-cli 和其他工具无法生成我需要的文档类型。这是一个示例文件:

{
    "openapi": "3.0.0",
    "paths": {},
    "info": {
        "title": "My File",
        "version": "1.0.0"
    },
    "components": {
        "schemas": {
            "my_entity_name": {
                "type": "object",
                "description": "....",
                "properties": {
                    "propertyOne": {
                        "type": "string",
                        "description": "..."
                    },
                    "propertyTwo": {
                        "type": "string",
                        "format": "date",
                        "description": "..."
                    }
                }
            }
        }
    }
}

在我的解决方案中,我使用 jq 来解析文件(macOS、ksh)。由于有这么多,我想将一个环境变量传递给jq。这在 shell 中很简单:

 % entity_name=my_entity_name
 % jq -r 'select(.components.schemas.'$entity_name'.properties != null)' file.json

在脚本文件中,方法类似,我得到了我期望的结果。但是,鉴于我正在尝试做的事情的性质,我想使用 jq -f 选项将 jq 命令放入文件中。

我尝试将以下内容放入名为的文件中jqscript.jq

 select(.components.schemas.'$entity_name'.properties != null)

我这样打电话:

  % jq -rf jqscript.jq --arg entity_name "$entity_name" file.json

这会导致错误:

jq: error: syntax error, unexpected INVALID_CHARACTER, expecting FORMAT or QQSTRING_START (Unix shell quoting issues?) at <top-level>, line 1:
select(.components.schemas.'$entity_name'.properties != null)                           
jq: 1 compile error

我试图通过修改'$entity_name'to $entity_name(删除单引号)、$[entity_name]${entity_name}等来破译如何在这种情况下使用环境变量,但我得到了类似的结果。

我能够使用以下示例脚本验证变量是否可以传递给 jq 脚本文件:

value: $entity_name
} |
.value

当我使用这个文件运行时% jq -rf jqscript.jq --arg entity_name "$entity_name" file.json,我得到了 entity_name 返回的预期值。

如何使用既在 jq 命令中又在 jq 脚本文件中的环境变量?

切普纳

您正在使用变量的值动态构建过滤器这是脆弱的,因为结果表达式被解析,而不是按字面意思使用变量的值(类似于 SQL 注入攻击)。

您可以使用 直接访问环境$ENV

 % export entity_name=my_entity_name
 % jq -r 'select(.components.schemas[$ENV.entity_name].properties != null)' file.json

或者只是将密钥作为显式参数传递

% jq -r --arg entity_name my_entity_name 'select(.components.schemas[$entity_name].properties != null)' file.json

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在jq解析中使用环境变量参数

来自分类Dev

如何在Robot框架脚本中使用环境变量

来自分类Dev

如何在Powershell命令中使用环境变量

来自分类Dev

如何在docker run命令中使用环境变量?

来自分类Dev

如何在.properties或xml文件中使用环境变量

来自分类Dev

如何在项目文件中使用环境变量的值?

来自分类Dev

如何在shell管道中使用`jq`?

来自分类Dev

SSH环境变量如何与Shell脚本文件一起使用?

来自分类Dev

如何在shell中使用jq cmd变量

来自分类Dev

我如何在jq中使用变量?(MacOS,shell)

来自分类Dev

如何在shell脚本文件中使用json变量?

来自分类Dev

如何在shell脚本中使环境变量“导出”?

来自分类Dev

如何在Passenger-docker容器的启动脚本中使用环境变量

来自分类Dev

如何在Docker构建过程中使用环境变量来获取脚本?

来自分类Dev

如何在python的同一shell中使用脚本导出环境变量?

来自分类Dev

如何在 Visual Studio 调试命令中使用环境变量

来自分类Dev

如何在Windows中使用命令行修改环境变量

来自分类Dev

如何在Verilog中使用环境变量或命令行设置宏的值?

来自分类Dev

如何在值数组中使用 jq 进行选择?

来自分类Dev

如何在bash中使用jq迭代JSON内容

来自分类Dev

如何在bash中使用jq创建for循环

来自分类Dev

如何在Docker中使用httpie和jq?

来自分类Dev

如何在 JS/JQ 中使用函数作为 if 的条件

来自分类Dev

如何在 bash 腳本中使用 jq 語法?

来自分类Dev

如何使用jq通配符

来自分类Dev

我如何在金字塔的.ini文件中使用环境变量?

来自分类Dev

如何在docker-compose.yml的.env文件中使用环境变量?

来自分类Python

如何在Django视图中使用.env文件中的环境变量?

来自分类Dev

k8s yaml文件中,如何在容器中使用环境变量

Related 相关文章

  1. 1

    如何在jq解析中使用环境变量参数

  2. 2

    如何在Robot框架脚本中使用环境变量

  3. 3

    如何在Powershell命令中使用环境变量

  4. 4

    如何在docker run命令中使用环境变量?

  5. 5

    如何在.properties或xml文件中使用环境变量

  6. 6

    如何在项目文件中使用环境变量的值?

  7. 7

    如何在shell管道中使用`jq`?

  8. 8

    SSH环境变量如何与Shell脚本文件一起使用?

  9. 9

    如何在shell中使用jq cmd变量

  10. 10

    我如何在jq中使用变量?(MacOS,shell)

  11. 11

    如何在shell脚本文件中使用json变量?

  12. 12

    如何在shell脚本中使环境变量“导出”?

  13. 13

    如何在Passenger-docker容器的启动脚本中使用环境变量

  14. 14

    如何在Docker构建过程中使用环境变量来获取脚本?

  15. 15

    如何在python的同一shell中使用脚本导出环境变量?

  16. 16

    如何在 Visual Studio 调试命令中使用环境变量

  17. 17

    如何在Windows中使用命令行修改环境变量

  18. 18

    如何在Verilog中使用环境变量或命令行设置宏的值?

  19. 19

    如何在值数组中使用 jq 进行选择?

  20. 20

    如何在bash中使用jq迭代JSON内容

  21. 21

    如何在bash中使用jq创建for循环

  22. 22

    如何在Docker中使用httpie和jq?

  23. 23

    如何在 JS/JQ 中使用函数作为 if 的条件

  24. 24

    如何在 bash 腳本中使用 jq 語法?

  25. 25

    如何使用jq通配符

  26. 26

    我如何在金字塔的.ini文件中使用环境变量?

  27. 27

    如何在docker-compose.yml的.env文件中使用环境变量?

  28. 28

    如何在Django视图中使用.env文件中的环境变量?

  29. 29

    k8s yaml文件中,如何在容器中使用环境变量

热门标签

归档