Curl - 매개변수 목록이 너무 깁니다.

Curl - 매개변수 목록이 너무 깁니다.

내 문제는 다음과 비슷합니다cUrl: 매개변수 목록이 너무 깁니다.

Unix 쉘 스크립트에서 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]

긴 매개변수 제한 없이 별도의 파일에서 "base64" 콘텐츠를 읽기 위해 위의 CURL 코드를 다시 작성하는 데 도움을 줄 수 있는 사람이 있나요?

답변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
)

셸 구현에 따라 데이터는 임시 파일에 저장되거나 파이프를 통해 제공됩니다.

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'
    )
)

이는 약간 더 효율적이며 이진 데이터를 출력하는 명령에도 작동합니다.

관련 정보