Curl - 参数列表太长

Curl - 参数列表太长

我的问题类似于cUrl:参数列表太长

我从 unix shell 脚本向 CURL 发送以下命令

var=$(base64 sample.pdf | perl -pe 's/\n//g')
var1=$(curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d' { "'"data"'" : "'"$var"'" }')
echo $var1

我收到错误为curl: /usr/bin/curl: cannot execute [Argument list too long]

任何人都可以帮助重写上面的 CURL 代码,从单独的文件中读取“base64”内容,而不是因为参数限制很长?

答案1

问题解决了。

我尝试如下,它有效..

var1=$(curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d @test.json)
echo $var1

答案2

在带有 的系统上/dev/fd/x,您还可以执行以下操作:

var1=$(
  curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d @/dev/fd/3 3<< EOF
 { "data" : "$(base64 sample.pdf | tr -d '\n')" }
EOF
)

根据 shell 实现,数据存储在临时文件中或通过管道提供。

使用zshbash,您还可以执行以下操作:

var1=$(
  curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' \
    -d @<(
      printf ' { "data": "'
      base64 sample.pdf | tr -d '\n'
      printf ' }\n'
    )
)

这会稍微更有效,并且也适用于输出二进制数据的命令。

相关内容