Problema resolvido.
Eu tentei como abaixo, funcionou ..
var1=$(curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d @test.json)
echo $var1
A minha pergunta é semelhante a lista de argumentos do cUrl: demasiado longa
Estou enviando o seguinte comando para o CURL do shell script unix
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
Recebi erro como curl: /usr/bin/curl: cannot execute [Argument list too long]
Alguém pode ajudar a reescrever o código CURL acima, para ler o conteúdo 'base64' de um arquivo separado, em vez de o limite do argumento ser longo?
Problema resolvido.
Eu tentei como abaixo, funcionou ..
var1=$(curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d @test.json)
echo $var1
Em sistemas com /dev/fd/x
, você também pode fazer:
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
)
Dependendo da implementação do shell, os dados são armazenados em um arquivo temporário ou alimentados por um pipe.
Com zsh
ou bash
, você também pode fazer:
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'
)
)
O que seria um pouco mais eficiente e também funcionaria para comandos que geram dados binários.
Tags curl