
Следующая команда отлично работает в 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.