以下命令在 bash 中可以正常工作:
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=XXXXXXX" "Name=instance-state-code,Values=16" \
--query 'Reservations[0].Instances[0].PublicDnsName'
但是,如果我尝试在 zsh 中运行它,它会给我:
(eval):1: no matches found: Reservations[0].Instances[0].PublicDnsName
有没有什么办法可以解决这个问题?
我在跑:
aws-cli/1.11.5 Python/2.7.6 Linux/4.4.0-45-generic botocore/1.4.62
答案1
尝试这个:
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=XXXXXXX" "Name=instance-state-code,Values=16" \
--query '"Reservations[0].Instances[0].PublicDnsName"'
括号用于在嘚和狂欢。区别在于默认情况下狂欢如果不匹配,则保持模式不变,而嘚打印“未找到匹配”消息。
通常,用单引号将它们括起来(如问题中所做的那样)应该可以解决这个问题。但似乎至少选项的值--query
是在没有事先清理或额外引用的情况下运行的eval
。您会收到错误消息,因为现有的单引号不会作为值的一部分传递。在我建议的解决方案中,双引号将被传递,因此查询在通过 eval 运行时仍被引用。