заменить файл, если он отличается после выполнения вызова curl - PullRequest
0 голосов
/ 08 января 2020

Вот что мне нужно сделать:

  1. У меня есть URL-адрес, который мне нужно выполнить с помощью curl.
  2. Если статус равен 200, запишите ответ во временный файл.
  3. Теперь сравните этот временный файл с другим файлом ("/opt/proc/config/init.txt").
  4. Если временный файл отличается, замените содержимое init.txt на этот временный файл.
  5. Но если статус не равен 200, выйдите с ненулевым кодом статуса с сообщением.

Ниже приведено то, что я получил. Есть ли лучший или эффективный способ сделать это? Также можно ли все это сделать в одну строку, если это возможно?

URL="some_url"
# store the whole response with the status at the end
response=$(curl --silent --write-out "HTTPSTATUS:%{http_code}" -X POST $URL)
# extract the body
new="$(echo "$response" | sed -e 's/HTTPSTATUS\:.*//g')"
# extract the status
status=$(echo "$response" | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
# print the body
echo "$new"
echo "$new" > /opt/proc/config/temp.txt

if [ "$status" -eq 200  ]; then
    if ! cmp /opt/proc/config/init.txt /opt/proc/config/temp.txt > /dev/null 2>&1
    then
      echo different
      mv /opt/proc/config/temp.txt /opt/proc/config/init.txt
    else
      echo same
    fi
else
  echo "Error [HTTP status: $status]"
  rm /opt/proc/config/temp.txt
  exit 1
fi

1 Ответ

0 голосов
/ 08 января 2020

Вы можете играть с && (при успехе) и || (при неудаче). Например:

curl --silent --write-out "HTTPSTATUS:%{http_code}" -X POST $URL | grep HTTPSTATUS:200 && echo 200 || echo non200

и

cmp /opt/proc/config/init.txt /opt/proc/config/temp.txt && echo same || echo different
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...