내 문제는 다음과 비슷합니다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'
)
)
이는 약간 더 효율적이며 이진 데이터를 출력하는 명령에도 작동합니다.