4

Мне нужна команда curl, возможно, с некоторой хакерской операцией bash, которая:

  1. Выводит любые 2xx ответа в файл
  2. Выводит любые не-2xx ответы на stderr
  3. Выход с ненулевым кодом состояния, когда происходит ответ не 2xx

Я знаю, что флаг -f получит мне 3, а перенаправление -o или pipe даст мне 1. Но я не могу тогда понять, как получить 2.

2 ответа2

1

Не могли бы вы отобразить вывод curl во временный файл (с PID как частью имени). Установите таймер в фоновом режиме на длительное время (5+ минут, чтобы удалить файл). Затем выполните команду sed для # 1 в файл, а затем команду sed для # 2 в STDerror. Вторая команда может использовать команду q, чтобы вернуть ненулевой ответ. Ищите здесь использование команды q в sed. https://stackoverflow.com/questions/15965073/return-code-of-sed-for-no-match

0

Это то, что я в итоге сделал:

HTTP_CODE=`curl http://example.com/ \
      --verbose
      --write-out "%{http_code}" \
      --output my-output-file`

if [ "$HTTP_CODE" != "200" ]; then
    cat my-output-file
    rm my-output-file
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .