
次のコマンドは 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 で実行されるときに引用符で囲まれたままになります。