извлечь токен из результата curl с помощью сценария оболочки - PullRequest
0 голосов
/ 13 марта 2019

Я пишу этот скрипт

#!/bin/bash
# cm.sh

  curl -i \
  -H "Content-Type: application/json" \
  -d '
{ "auth": {
    "identity": {
      "methods": ["password"],
      "password": {
        "user": {
          "name": "admin",
          "domain": { "id": "default" },
          "password": "secret"
        }
      }
    }
  }
}' \
  "http://localhost/identity/v3/auth/tokens" ; echo



echo $tokenizer1 
echo $tokenizer2

Но все они (awk или sed) одинаковы

  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   540  100   312  100   228    312    228  0:00:01 --:--:--  0:00:01  5142

Моя цель - поместить токен в переменную на потом. Спасибо, ребята заранее.

Ответы [ 2 ]

1 голос
/ 13 марта 2019

Вместо того, чтобы использовать прямой результат cURL, вы можете сохранить результат в файл и использовать для него команду grep.Что-то вроде этого может быть:

curl -o boulou.txt http://localhost/identity/v3/auth/tokens && cat boulou.txt | grep "X-Subject-Token" | awk '{printf $2}'

Редактировать, если вы просто хотите получить желаемый вывод, добавьте --silent к команде cURL:

curl -o boulou.txt http://localhost/identity/v3/auth/tokens --silent && cat boulou.txt | grep "X-Subject-Token" | awk '{printf $2}'

Редактировать 2: Если вы хотитеэкспортируйте его и удалите файл, вы можете использовать что-то вроде этого:

export OS_TOKEN=$(curl -o billy.txt hhttp://localhost/identity/v3/auth/tokens --silent &&  cat billy.txt | grep "X-Subject-Token" | awk '{printf $2}') && rm billy.txt
0 голосов
/ 13 марта 2019

"Как использовать grep / awk для извлечения заголовка в поле из curl, когда я передаю ему документ JSON, когда содержимое хранится в переменной?"Это действительно очень сложная и уникальная проблема.

Однако, если вы постепенно смоделируете каждую часть своего кода, чтобы сузить его, вы обнаружите, что это гораздо более простой вопрос, который вы могли бы исследовать или задавать вместо этого.:

Как использовать grep / awk для содержимого из переменной?

У меня есть переменная, содержащая заголовки HTTP, и я хочу извлечь значение одного из них.Вот пример:

variable='Foo: 1
Bar: 2
Baz: 3'

Это то, что я пытался получить 2 от Bar:

  # Just hangs
  tokenizer1=$variable `grep "Bar" | awk '{printf $2}'`
  # Is empty
  tokenizer2=$variable | `grep "Bar" | awk '{printf $2}'`

Ответ здесь заключается в использовании echo передать содержимое так, чтобы grep мог прочитать его на stdin:

tokenizer3=$(echo "$variable" | grep "Bar" | awk '{printf $2}')

Это легко применить к вашему примеру:

tokenizer3=$(echo "$token" | grep "X-Subject-Token" | awk '{printf $2}')
echo "The value is $tokenizer3"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...