Как отключить индикатор прогресса в cURL?
Я пытаюсь использовать cURL в скрипте и хочу сделать так, чтобы не отображалась полоса прогресса.
Я попробовал опции -s, -silent, -S и -quiet, но ничего из этого не сработало.
Вот типичная команда, которую я пробовал:
curl -s http://google.com > temp.html
Прогресс бар появляется только когда результаты перенаправляются в файл, то есть curl -s http://google.com не показывает полосы прогресса, но curl -s http://google.com > temp.html показывает.
4 ответ(ов)
Команда
curl -s http://google.com > temp.html
работает с версией curl 7.19.5 на Ubuntu 9.10 (без отображения индикатора прогресса). Однако, если по какой-либо причине это не работает на вашей платформе, вы всегда можете перенаправить stderr в /dev/null:
curl http://google.com 2>/dev/null > temp.html
Проблема, с которой вы столкнулись, связана с тем, как curl обрабатывает флаги -s и -S. Флаг -s (или --silent) отключает вывод прогресс-бара и сообщений об ошибках. Однако в вашей команде:
curl -s http://google.com > temp.html
прогресс-бар все равно может отображаться в некоторых версиях curl, так как этот флаг не полностью скрывает его в случае, если возникают ошибки.
Чтобы полностью отключить прогресс-бар и при этом получать сообщения об ошибках, вы можете использовать флаг -S вместе с -s:
curl -ss http://google.com > temp.html
При использовании -ss, curl не будет выводить прогресс-бар и при этом будет показывать сообщения об ошибках, если они возникнут. Это особенно полезно, если вам нужно видеть ошибки, но не отвлекаться на прогресс-бар.
Так что, если вы хотите скрыть прогресс-бар и получать сообщения об ошибках, используйте вариант с двумя -s как в приведенном вами примере.
Не уверен, почему это происходит. Попробуйте использовать -s вместе с опцией -o, чтобы указать файл вывода вместо >.
На macOS 10.13.6 (High Sierra) опция -sS действительно работает. Это особенно полезно внутри Perl, в команде вроде curl -sS --get {someURL}, что, если честно, намного проще, чем использование любых оберток вроде LWP или HTTP для простого получения содержимого веб-сайта или веб-страницы.
Как запросить ввод Yes/No/Cancel в скрипте оболочки Linux?
Как работает "cat << EOF" в bash?
Linux: Копирование и создание директории назначения, если она не существует
Прерывание скрипта оболочки при возвращении любой команды ненулевого значения
Автоматический вход в Docker через Bash-скрипт