如何在bash curl命令中使用prompt中的变量?

时间:2014-02-28 21:19:56

标签: bash curl

我正在尝试编写一个脚本,它将设置一个Rackspace云服务器,但我遇到了一个问题。当脚本运行时,它将询问用户几个问题以获取用户名和api密钥。然后我在curl命令中使用这些值。 curl命令的输出也需要分配给变量。这就是我所拥有的 - 我认为我只缺少一个语法错误。这不是整个剧本,它只是我遇到麻烦的唯一部分。

#!/bin/bash

# Ask questions to get login creds
read -p "Rackspace Username? " username
read -p "Rackspace API Key? " apikey

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

.....

1 个答案:

答案 0 :(得分:4)

以下行的问题是$username$apikey在单引号内,而bash变量不在单引号内评估:

-d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"$username", "apiKey":"$apikey" } } }' \

要修复它,请在bash变量之前结束单引号字符串,然后再次启动它:

-d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":'"$username"', "apiKey":'"$apikey"' } } }' \

如果你需要字符串中的文字双引号才能使它工作,那么我们必须将它们添加到字符串的单引号部分中:

-d '{ "auth":{ "RAX-KSKEY:apiKeyCredentials":{ "username":"'"$username"'", "apiKey":"'"$apikey"'" } } }' \