/usr/bin/jq:参数列表太长错误bash

/usr/bin/jq:参数列表太长错误bash,bash,jq,Bash,Jq,我想从更大的swagger.json文件内容中替换示例json中的值,但它太大了 Error: /usr/bin/jq: Argument list too long error bash 为解决此问题工作了几天,但在此无法确定问题。 这是示例json文件: { "name": "", "description": "", "context": "", "version": "", "provider": "cbs", "apiDefinition": "

我想从更大的swagger.json文件内容中替换示例json中的值,但它太大了

Error:
/usr/bin/jq: Argument list too long error bash 
为解决此问题工作了几天,但在此无法确定问题。 这是示例json文件:

{
   "name": "",
   "description": "",
   "context": "",
   "version": "",
   "provider": "cbs",
   "apiDefinition": "",
   "wsdlUri": null,
   "responseCaching": "Disabled",
   "cacheTimeout": 300,
   "destinationStatsEnabled": false,
   "isDefaultVersion": true,
   "transport":    [
      "http",
      "https"
   ],
   "tags": ["PROVIDER_","MIFE"],
   "tiers": ["Unlimited","Default","Silver","Subscription","Gold","Premium","Bronze"],
   "maxTps":    {
      "sandbox": 5000,
      "production": 1000
   },
   "visibility": "PUBLIC",
   "visibleRoles": [],
   "endpointConfig": "",
   "endpointSecurity":    {
      "username": "user",
      "type": "basic",
      "password": "pass"
   },
   "gatewayEnvironments": "Production and Sandbox",
   "sequences": [],
   "subscriptionAvailability": null,
   "subscriptionAvailableTenants": [],
   "businessInformation":    {
      "businessOwnerEmail": "BUSINESSOWNEREMAIL_",
      "technicalOwnerEmail": "TECHNICALOWNEREMAIL_",
      "technicalOwner": "TECHNICALOWNER_",
      "businessOwner": "BUSINESSOWNER_"
   },
   "corsConfiguration":    {
      "accessControlAllowOrigins": ["*"],
      "accessControlAllowHeaders":       [
         "authorization",
         "Access-Control-Allow-Origin",
         "Content-Type",
         "SOAPAction"
      ],
      "accessControlAllowMethods":       [
         "GET",
         "PUT",
         "POST",
         "DELETE",
         "PATCH",
         "OPTIONS"
      ],
      "accessControlAllowCredentials": false,
      "corsConfigurationEnabled": false
   }
}
  • swagger.json文件-
这是我使用的命令,它给了我一个错误,我认为参数太大

swagger = $(cat swagger.json)

jq -r --arg swagger "$swagger" '.apiDefinition = $swagger' <<<"$json"
swagger=$(cat swagger.json)

jq-r--arg-swagger“$swagger”'.apiDefinition=$swagger'Q没有明确说明如何设置
$swagger
,但似乎与其使用
--arg-swagger$swagger
,不如使用一个面向文件的命令行选项,可能是:

--argfile swagger swagger.json
有很多选择,但要在这里明智地探索这些,最好至少提供一个完整但非常小的示例。(本例不必说明“参数列表过长”错误!)

警告 如果您担心
--argfile
选项不受欢迎,那么如果您的
jq
--slurpfile
选项,请务必使用
--slurpfile
,但请注意后一个选项将文件内容包装到JSON数组中,因此您必须考虑到这一点

这些选项和其他选项都在您的示例的官方文档中简要介绍:

jq -r --arg swagger "$swagger" '.apiDefinition = $swagger' <<<"$json"
结果输出的前10行:

{
  "apiDefintion": [
    {
      "id": 1,
      "first_name": "Samson",
      "last_name": "Wandrack",
      "email": "swandrack0@hibu.com",
      "gender": "Male",
      "ip_address": "122.171.218.251"
    },
  • -在这种情况下,需要使用命令行上的JSON作为输入JSON,而不是从stdin或文件中读取它
  • --slurpfile将swagger.json的内容作为数组放入变量$swagger中
  • -r是不需要的,因为它没有效果,除非输出只是字符串(并且它的原始输出使其无效)
  • $swagger[0]仅用于包含slurped数组的第一项
从以下地址的文档:

--空输入/-n:

根本不要读取任何输入!相反,使用null作为输入运行一次过滤器。当使用jq作为简单的计算器或从头构造JSON数据时,这非常有用

--slurpfile变量名文件名:

此选项读取命名文件中的所有JSON文本,并将解析的JSON值数组绑定到给定的全局变量。如果使用--slurpfile foo bar运行jq,那么$foo在程序中可用,并且有一个数组,其元素对应于名为bar的文件中的文本

--原始输出/-r:

使用此选项,如果过滤器的结果是字符串,那么它将直接写入标准输出,而不是格式化为带引号的JSON字符串。这对于使jq过滤器与非基于JSON的系统进行通信非常有用


你为什么要删掉剧本的那部分?你能把它寄回去吗?告诉我们如何重现这个问题?同时发布您正在尝试此操作的
jq
版本。我想用swagger.json values.jq-commandline json processor[version 1.5-1-a5b5cbe]替换apiDefinition关键字值。如果文件太长,请将其发布到外部文件repo中并链接到此处抱歉!无法共享:(swagger=$(cat swagger.json)root@mife-kubernetes master:/home/svradmin/jsontest#jq-r--slurpfile-swagger“$swagger”。apiDefinition=$swagger'
{
  "apiDefintion": [
    {
      "id": 1,
      "first_name": "Samson",
      "last_name": "Wandrack",
      "email": "swandrack0@hibu.com",
      "gender": "Male",
      "ip_address": "122.171.218.251"
    },