私の問題は次のようになります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'
)
)
これはやや効率的で、バイナリデータを出力するコマンドでも機能します。