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

0

Попробуй это:

aws ec2 describe-instances \
  --filters "Name=tag:Name,Values=XXXXXXX" "Name=instance-state-code,Values=16" \
  --query '"Reservations[0].Instances[0].PublicDnsName"'

Скобки используются для сглаживания как в zsh, так и в bash. Разница в том, что по умолчанию bash оставляет шаблон без изменений, если он не совпадает, в то время как zsh выводит сообщение "не найдено совпадений".

Обычно цитирование их одинарными кавычками - как это делается в вопросе - должно решить эту проблему. Но кажется, что по крайней мере значение параметра --query запускается через eval без предварительной очистки или дополнительных кавычек. Вы получите сообщение об ошибке, поскольку существующие одинарные кавычки не передаются как часть значения. В предложенном мною решении двойные кавычки будут переданы, так что запрос все еще будет заключен в кавычки, когда он выполняется через eval.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .