Странное поведение при разборе результата от curl + awk - PullRequest
0 голосов
/ 07 января 2019

Используя curl в Ubuntu, я пытаюсь получить версию Jenkins, вдохновленную:

https://wiki.jenkins.io/display/JENKINS/Remote+access+API

В скрипте bash я делаю:

VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep -Fi X-Jenkins: | awk '{print $2}')
echo "__A__[${VERSION}]__B__"

Но когда я запускаю скрипт, я получаю:

]__B__2.89.2

По какой-то причине префикс: __A__[ проглатывается, а суффикс 1014 * превращается в префикс .

Я также попытался обрезать вывод:

VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep -Fi X-Jenkins: | awk '{print $2}' | sed -e 's/^[ \t]*//')

Но это дает тот же результат.

Как предложено ниже, я также попробовал:

echo '__A__['"${VERSION}"']__B__'

Но все равно дает тот же / неправильный результат.

Несколько других вещей, которые я пробовал (дает тот же результат)

Тот же / неправильный вывод

VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep -i X-Jenkins: | awk '{print $2}')
echo '__A__['"${VERSION}"']__B__'

Тот же / неправильный вывод

VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep X-Jenkins: | awk '{print $2}')
echo '__A__['"${VERSION}"']__B__'

На основании приведенного ниже предложения, которое я сейчас попробовал:

echo $VERSION|od -ax

Что дает:

0000000   2   .   8   9   .   2  cr  nl
           2e32    3938    322e    0a0d
0000010

Если сравнить это с:

VERSION_TEMP="2.89.2"
echo $VERSION_TEMP|od -ax

Я получаю:

0000000   2   .   8   9   .   2  nl
           2e32    3938    322e    000a
0000007

Похоже, что именно кри в VERSION var вызывает проблему (не уверен, как это объясняет все изменения префикса / суффикса, как описано выше).

РЕШЕНО: Основываясь на данных Ромео, я теперь начал работать с добавлением |tr -d '\r':

VERSION=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" $URL | grep X-Jenkins: | awk '{print $2}'|tr -d '\r')

1 Ответ

0 голосов
/ 07 января 2019

Видимо, вывод содержит возврат каретки DOS.

Попробуйте добавить tr -d '\015':

version=$(curl -k -i -X GET --insecure --silent --header \"Authorization: Bearer $TOKEN \" "$URL" |
    tr -d '\015' |
   awk 'tolower($0) !~ /x-jenkins:/{print $2}')
echo "__A__[$version]__B__"

Имена переменных в верхнем регистре зарезервированы для системного использования, поэтому я изменил и ваши имена на строчные и удалил бесполезные grep.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...