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

har*_*ith 8 bash jq

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

Error:
/usr/bin/jq: Argument list too long error bash 
Run Code Online (Sandbox Code Playgroud)

花了几天时间来解决这个问题,但无法在这里确定问题。这是示例 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
   }
}
Run Code Online (Sandbox Code Playgroud)

这是我使用的命令,它给了我一个错误,因为参数太大。

swagger = $(cat swagger.json)

jq -r --arg swagger "$swagger" '.apiDefinition = $swagger' <<<"$json"
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮忙吗!

招摇= $(猫招摇.json)

pea*_*eak 6

Q 没有明确说明如何$swagger设置,但似乎--arg swagger $swagger最好使用面向文件的命令行选项之一,也许类似于:

--argfile swagger swagger.json
Run Code Online (Sandbox Code Playgroud)

有很多替代方案,但为了在这里明智地探索这些方案,最好提供至少一个完整但非常微小的示例。(该示例不必说明“参数列表太长”错误!)

警告

如果您担心该--argfile选项已被弃用,那么请务必使用--slurpfile它(如果您jq有该选项),但请注意,后一个选项将文件内容包装到 JSON 数组中,因此您必须考虑到这一点。

这些和其他选项都在https://stedolan.github.io/jq/manual/的官方文档中简洁地介绍了