Curl - Lista de argumentos muito longa

1

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?

    
por Radhasankar 22.11.2016 / 11:19

2 respostas

3

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
    
por 22.11.2016 / 12:26
1

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.

    
por 22.11.2016 / 13:03

Tags