我正在尝试编写一个脚本,它将设置一个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!"
.....
答案 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"'" } } }' \