【发布时间】:2020-10-16 10:16:56
【问题描述】:
我有以下 bash 脚本:
#!/bin/sh
# Update the DNS
RECORD=$1
if [ -z "${RECORD}" ]; then
echo "Please provide a valid record (URL endpoint)"
exit 1
fi
ID=$(aws route53 change-resource-record-sets --hosted-zone-id ZONEID --cli-input-json "{\"HostedZoneId\":\"Z1R8UBAEXAMPLE\",\"ChangeBatch\":{\"Changes\":[{\"Action\":\"UPSERT\",\"ResourceRecordSet\":{\"Name\":\"www.domain.tld.\",\"Type\":\"CNAME\",\"TTL\":300,\"ResourceRecords\":[{\"Value\":\"${RECORD}\"}]}}]}}" | grep "/change/" | cut -c 15- | sed -e 's/"//g' | sed 's/\(.*\),/\1 /'))
echo "Change ID: ${ID}"
aws route53 get-change --id ${ID} | grep INSYNC
while [ $? -ne 0 ]
do
echo "WAITING FOR DNS TO UPDATE... PLEASE WAIT"
sleep 5s
aws route53 get-change --id ${ID} | grep INSYNC
done
由于某种原因,返回的ID 在末尾附加了一个,,即使我已经用| grep "/change/" | cut -c 15- | sed -e 's/"//g' | sed 's/\(.*\),/\1 /') 明确删除了它
我也尝试了| jq -r '.ChangeInfo.Id',但, 仍被附加到ID
我错过了什么?
非常感谢任何建议
【问题讨论】:
-
aws route53命令的 JSON 输出是什么?为什么必须用双引号将 JSON 存储复杂化并转义?使用单引号 -'{"HostedZoneId":"Z1R8UBAEXAMPLE","ChangeBatch":{"Changes":[{"Action":"UPSERT","ResourceRecordSet":{"Name":"www.domain.tld.","Type":"CNAME","TTL":300,"ResourceRecords":[{"Value":""}]}}]}}' -
来自文档docs.aws.amazon.com/cli/latest/reference/route53/… 它是一个 JSON 对象
-
那么
| jq -r '.ChangeInfo.Id'应该可以正常工作。您是否错误地将jq的输出再次传送回sed?请发布 JSON 输出,没有它,很难解释为什么你会看到这个问题 -
{ "ChangeInfo": { "Status": "PENDING", "SubmittedAt": "2020-10-16T10:45:56.841Z", "Id": "/change/C0155693NNXR37X9226V" } }所以是的jq -r '.ChangeInfo.Id'应该可以工作,但由于某种原因它附加了一个, -
这不可能发生,除非您仍然像最初发布的那样将
sed命令通过管道传输到 jq 的输出
标签: bash amazon-web-services sed jq aws-cli