【问题标题】:How can I save in a variable a portion of my cURL GET command?如何将 cURL GET 命令的一部分保存在变量中?
【发布时间】:2022-01-30 11:19:53
【问题描述】:

我目前正在尝试在 DigitalOcean API 上设置一个自动化服务器,我需要提取服务器的 ID 以便稍后在命令中使用它。

我的 bash 命令如下:

DROPLETID="$(curl -X GET \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v2/droplets?tag_name=$TAG" | grep "id": | sed 's/"id": //g' | tr -d '\r')"

cURL 命令的答案是这样的:

{"droplets":[{"id":012345678,"name":"ppg-active","memory":1024,"vcpus":1,"disk":25,"locked":false,"status":"active","kernel":null,"created_at":"2022-01-30T10:28:10Z","features":["droplet_agent","private_networking"],"backup_ids":[],"next_backup_window":null,"snapshot_ids":[],"image":{"id":01234567,"name":"18.04 (LTS) x64","distribution":"Ubuntu","slug":"ubuntu-18-04-x64","public":true,"regions":["nyc3","nyc1","sfo1","nyc2","ams2","sgp1","lon1","ams3","fra1","tor1","sfo2","blr1","sfo3"],"created_at":"2022-01-11T21:07:39Z","min_disk_size":15,"type":"base","size_gigabytes":0.41,"description":"Ubuntu 18.04 x86 image","tags":[],"status":"available"},"volume_ids":[],"size":{"slug":"s-1vcpu-1gb","memory":1024,"vcpus":1,"disk":25,"transfer":1.0,"price_monthly":5.0,"price_hourly":0.00744,"regions":["ams3","blr1","fra1","lon1","nyc1","nyc3","sfo3","sgp1","tor1"],"available":true,"description":"Basic"},"size_slug":"s-1vcpu-1gb","networks":{"v4":[{"ip_address":"XXX.XXX.XXX.XX","netmask":"255.255.240.0","gateway":"XXX.XXX.XXX.X","type":"public"},{"ip_address":"XX.XXX.XX.X","netmask":"255.255.240.0","gateway":"XX.XXX.X.X","type":"private"}],"v6":[]},"region":{"name":"Frankfurt 1","slug":"fra1","features":["backups","ipv6","metadata","install_agent","storage","image_transfer"],"available":true,"sizes":["s-1vcpu-1gb","s-1vcpu-1gb-amd","s-1vcpu-1gb-intel","s-1vcpu-2gb","s-1vcpu-2gb-amd","s-1vcpu-2gb-intel","s-2vcpu-2gb","s-2vcpu-2gb-amd","s-2vcpu-2gb-intel","s-2vcpu-4gb","s-2vcpu-4gb-amd","s-2vcpu-4gb-intel","s-4vcpu-8gb","c-2","c2-2vcpu-4gb","s-4vcpu-8gb-amd","s-4vcpu-8gb-intel","g-2vcpu-8gb","gd-2vcpu-8gb","s-8vcpu-16gb","m-2vcpu-16gb","c-4","c2-4vcpu-8gb","s-8vcpu-16gb-amd","s-8vcpu-16gb-intel","m3-2vcpu-16gb","g-4vcpu-16gb","so-2vcpu-16gb","m6-2vcpu-16gb","gd-4vcpu-16gb","so1_5-2vcpu-16gb","m-4vcpu-32gb","c-8","c2-8vcpu-16gb","m3-4vcpu-32gb","g-8vcpu-32gb","so-4vcpu-32gb","m6-4vcpu-32gb","gd-8vcpu-32gb","so1_5-4vcpu-32gb","m-8vcpu-64gb","c-16","c2-16vcpu-32gb","m3-8vcpu-64gb","g-16vcpu-64gb","so-8vcpu-64gb","m6-8vcpu-64gb","gd-16vcpu-64gb","so1_5-8vcpu-64gb","m-16vcpu-128gb","c-32","c2-32vcpu-64gb","m3-16vcpu-128gb","m-24vcpu-192gb","g-32vcpu-128gb","so-16vcpu-128gb","m6-16vcpu-128gb","gd-32vcpu-128gb","m3-24vcpu-192gb","g-40vcpu-160gb","so1_5-16vcpu-128gb","m-32vcpu-256gb","gd-40vcpu-160gb","so-24vcpu-192gb","m6-24vcpu-192gb","m3-32vcpu-256gb","so1_5-24vcpu-192gb","so-32vcpu-256gb","m6-32vcpu-256gb","so1_5-32vcpu-256gb"]},"tags":["mc"],"vpc_uuid":"ef01391b-98c0-443f-94b2-0c4b94142c5a"}],"links":{},"meta":{"total":1}}

我只需要将 cURL 命令给我的第一个 ID 保存为变量,理想的情况是当我输入时:

echo $DROPLETID

我明白了:

01234678

正如您在我的第一个命令中看到的那样,我尝试 grep 该 ID 并 sed 它,但它不起作用。 有人知道吗?

非常感谢

【问题讨论】:

  • 最好使用jq解析JSON

标签: linux jq


【解决方案1】:

您可以使用jq

DROPLETID="$(curl -X GET \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $DIGITALOCEAN_TOKEN" \
  "https://api.digitalocean.com/v2/droplets?tag_name=$TAG" | jq '.droplets[0].id')"

【讨论】:

  • 非常感谢!祝你今天过得愉快! (你忘了最后的括号,但它就像一个魅力!)
猜你喜欢
  • 1970-01-01
  • 2021-08-27
  • 2021-07-13
  • 2022-07-29
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 2019-12-19
  • 1970-01-01
相关资源
最近更新 更多