在curl bash脚本中使用JSON输出

Gab*_*aka 1 bash curl rackspace-cloud

我想将文件自动上载到需要每天更新的auth令牌的机架文件中,因此我想创建一个获取auth令牌的脚本,然后在脚本中使用该令牌来上载文件。

这是获取auth令牌的命令,该令牌完美输出密钥:

curl -s -X POST https://auth.api.rackspacecloud.com/v2.0/tokens\
     -d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }'\
     -H "Content-type: application/json" | python -mjson.tool |\
python -c 'import sys, json;\
           print json.load(sys.stdin)[sys.argv[1]][sys.argv[2]][sys.argv[3]]'\
access token id
Run Code Online (Sandbox Code Playgroud)

这是上传文件的命令:

curl -X PUT -T file.xml -D - \
-H "Content-Type: text/xml" \
-H "X-Auth-Token: TOKENGOESHERE" \
URL
Run Code Online (Sandbox Code Playgroud)

我需要将令牌从第一条命令放入第二条命令的TOKENGOESHERE位置。

到目前为止,我尝试过的是:

token = curl -s -X POST https://auth.api.rackspacecloud.com/v2.0/tokens -d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }' -H "Content-type: application/json" | python -mjson.tool | python -c 'import sys, json; print json.load(sys.stdin)[sys.argv[1]][sys.argv[2]][sys.argv[3]]' access token id

curl -X PUT -T file.xml -D - \
-H "Content-Type: text/xml" \
-H "X-Auth-Token: $token" \
URL
Run Code Online (Sandbox Code Playgroud)

但是它没有用,我想它与引号有关,但是我对bash的了解不足,无法知道问题所在。

谢谢!

Jak*_*tka 5

这应该工作:

token=$(curl -s -X POST https://auth.api.rackspacecloud.com/v2.0/tokens \
    -d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"USER", "apiKey":"KEY" } } }' \
    -H "Content-type: application/json" \
    | python -mjson.tool \
    | python -c 'import sys, json; print json.load(sys.stdin)["access"]["token"]["id"]')

curl -X PUT -T file.xml -D - \
    -H "Content-Type: text/xml" \
    -H "X-Auth-Token: $token" \
    URL
Run Code Online (Sandbox Code Playgroud)