繁体   English   中英

通过shell脚本从curl结果中提取令牌

[英]extract token from curl result by shell script

我写这个脚本

#!/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

我的目标是将令牌放入变量中以备后用。 预先谢谢你们。

您可以将结果保存到文件中,然后使用grep命令来代替使用cURL的直接结果。 可能是这样的:

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

编辑,如果只希望输出,请在cURL命令中添加--silent

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

“当内容存储在变量中时,当我将其传递给JSON文档时,如何使用grep / awk从curl中提取字段中的标头?” 确实是一个非常棘手且独特的问题。

但是,如果逐步模拟出代码的每个部分以缩小范围,您会发现这是您可以研究或询问的更简单的问题:

如何在变量内容上使用grep / awk?

我有一个包含HTTP标头的变量,我想提取其中一个的值。 这是一个例子:

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

这就是我试图从Bar获得2

  # 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"

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM