Как повторно использовать переменную в сценарии оболочки при использовании в curl? - PullRequest
0 голосов
/ 11 декабря 2018

В зависимости от определенных условий я хочу использовать JWT, иначе я хочу указать путь к сертификатам.Таким образом, в моем сценарии оболочки это код:

if /* some condition */
  authorization='-H "'Authorization': 'Bearer' ${JWT}"'
else
  authorization="--cert "${ADMIN_CERT_PATH}" --key "${ADMIN_KEY_PATH}""

Теперь запрос curl должен быть: curl -H "Authorization: Bearer 348129" для условия if curl --cert /Users/.../admin_cert --key /Users/../admin_key .. для пути else

Для получения этого выводаМне нужно использовать следующий формат в моем сценарии оболочки для условия if

response_code="$(curl -s -o /dev/null -w "%{http_code}" "$authorization" "$status_url")"

и следующий формат для кода else:

response_code="$(curl -s -o /dev/null -w "%{http_code}" $authorization "$status_url")"

Примечание: мне нужна переменная $ authorization, указанная в первом случаеи без кавычек в другом случае.Я не хочу писать 2 разные команды curl, вместо этого использовать переменную авторизации.Таким образом, мне нужно изменить способ, которым я объявил свою переменную авторизации, так, чтобы я мог написать любую из команд curl только один раз, что работает как в случаях if, так и в других случаях.

Ответы [ 2 ]

0 голосов
/ 11 декабря 2018

Когда вы используете оболочку, которая поддерживает массивы, вы можете избежать необходимости во временном файле конфигурации.

curl_opts=(-s -o /dev/null -w "%{http_code}")
if /* some condition */
  curl_opts+=(-H "Authorization: Bearer $JWT")
else
  curl_opts+=(--cert "$ADMIN_CERT_PATH" --key "$ADMIN_KEY_PATH")
fi

...

response_code="$(curl "${curl_opts[@]}" "$status_url")"
0 голосов
/ 11 декабря 2018

curl поддерживает способ передачи параметров командной строки в файле, который я использовал ранее, когда у меня есть сложные параметры.Идея состоит в том, чтобы поместить сложные параметры командной строки в простой текстовый файл и дать команду curl читать параметры из него, используя параметр - config .

В этом случае сценарий оболочки будет выглядетьчто-то вроде следующего.

#!/bin/sh

## "safely" create a temporary configuration file
curlctl=$(mktemp -q -t $(basename "$0"))
if test $? -ne 0
then
    echo "$0: failed to create temporary file, exiting."
    exit 75  # EX_TEMPFAIL
fi
trap 'rm "$curlctl"' 0

## write parameters used in all cases
cat>>"$curlctl" <<EOF
output = /dev/null
silent
write-out = %{http_code}
EOF

## append conditional parameters
if test "$some" = 'condition'
then
    printf 'header = "Authorization: Bearer %s"\n' "$JWT" >> "$curlctl"
else
    echo "cert = $ADMIN_CERT_PATH" >> "$curlctl"
    echo "key = $ADMIN_KEY_PATH" >> "$curlctl"
fi

# uncomment to see what the config file looks like
# cat "$curlctl" | sed 's/^/curl config:   /'

response_code=$(curl --config "$curlctl" http://httpbin.org/get)
echo "response code: $response_code"

Первые несколько строк устанавливают временный файл, который удаляется при выходе из сценария оболочки.Если вы уже используете trap , ваша очистка, вероятно, будет более сложной.

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