Intereting Posts
Правила Udev для устройства с несколькими интерфейсами Почему драйвер vfat Linux не позволяет некоторым символам? журнал открытого и закрытого времени программы Как избавиться от нежелательного входного повторяющегося пояса? Удалите прокомментированные строки, кроме одного комментария, используя sed Как оптимизировать скрипт загрузки wget В чем разница между тремя версиями FreeBSD? Сравнение между: хостом Linux-хоста Windows vs Windows host Linux guest vs 2 выделенных компьютера с коммутатором KVM Запустите еще одну команду перед запуском команды, которую пользователь хочет запустить. Как смонтировать VDI с моментальным снимком? Что такое «пух» при применении патчей? Как классифицировать эти строки в этом файле ASCII Утечка памяти Debian после обновления растяжения Какой инструмент можно использовать для просмотра объектного файла? Ошибка сценария оболочки (: не найден )

Curl – список аргументов слишком длинный

Мой вопрос похож на cUrl: список аргументов слишком длинный

Я отправляю следующую команду в CURL из сценария оболочки 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 

Я получил ошибку как curl: /usr/bin/curl: cannot execute [Argument list too long]

Может ли кто-нибудь помочь переписать вышеприведенный код CURL, чтобы читать содержимое «base64» из отдельного файла, а не в качестве предела аргумента?

Проблема решена.

Я пробовал, как показано ниже, это сработало.

 var1=$(curl -XPUT 'http://localhost:9200/my_index5/my_type/my_id?pipeline=attachment&pretty' -d @test.json) echo $var1 

В системах с /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' ) ) 

Это будет немного более эффективным, а также работать с командами, которые выводят двоичные данные.