我的问题类似于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 实现,数据存储在临时文件中或通过管道提供。
使用zsh
或bash
,您还可以执行以下操作:
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'
)
)
这会稍微更有效,并且也适用于输出二进制数据的命令。