我想在 DigitalOcean 中创建 20 个液滴,并希望从 Bash 或 Ruby 中完成。 Bash 起初似乎是最简单的,但后来我发现 JSON 对引号非常挑剔,并要求 -d
参数有单引号。
所以我下面的脚本不会扩展 $line
变量 =(
问题
所以现在我在想,如果我使用 Ruby 会有帮助吗?我不会再次遇到同样的问题,只是使用另一种语言吗?
token=123
while read line; do
curl -qq -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" -d '{"name":"02267-$line","region":"fra1","size":"s-2vcpu-4gb","image":"ubuntu-18-04-x64","ssh_keys":["14063864","22056139","23743266"],"backups":false,"ipv6":false,"user_data":null,"private_networking":null,"volumes": null,"tags":["02267-$line"]}' "https://api.digitalocean.com/v2/droplets"
done < list.txt
list.txt
tokyo
seoul
osaka
kobe
最佳答案
使用像 jq
这样的工具为您生成正确的 JSON。
# Note: $x here is *not* a shell variable, but a jq variable
# that jq will expand, ensuring the value is correctly quoted.
filter='{name: "02267-\($x)",
region: "fra1",
size: "s-2vcpu-4gb",
image: "ubuntu-18-04-x64",
ssh_keys ["14063864","22056139","23743266"],
backups: false,
ipv6: false,
user_data: null,
private_networking: null,
volumes: null,
tags: ["02267-\($x)"]
}'
jq -n --argjson x "$line" "$filter" |
curl -qq -X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $token" \
-d @- \
"https://api.digitalocean.com/v2/droplets"
关于json - 从 Bash 或 Ruby 创建一个有效的 JSON 字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54023812/