
Der folgende Befehl funktioniert in Bash einwandfrei:
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=XXXXXXX" "Name=instance-state-code,Values=16" \
--query 'Reservations[0].Instances[0].PublicDnsName'
Wenn ich jedoch versuche, es in zsh auszuführen, erhalte ich Folgendes:
(eval):1: no matches found: Reservations[0].Instances[0].PublicDnsName
Gibt es eine Möglichkeit, das zu umgehen?
Ich renne:
aws-cli/1.11.5 Python/2.7.6 Linux/4.4.0-45-generic botocore/1.4.62
Antwort1
Versuche dies:
aws ec2 describe-instances \
--filters "Name=tag:Name,Values=XXXXXXX" "Name=instance-state-code,Values=16" \
--query '"Reservations[0].Instances[0].PublicDnsName"'
Klammern werden für das Globbing in beiden verwendetzshUndSchlagDer Unterschied besteht darin, dass standardmäßigSchlaglässt ein Muster unverändert, wenn es nicht übereinstimmt, währendzshdruckt eine „Keine Übereinstimmung gefunden“-Meldung.
Normalerweise sollte das Setzen in einfache Anführungszeichen – wie in der Frage – dieses Problem lösen. Aber es scheint, dass zumindest der Wert der Option ohne vorherige Bereinigung oder zusätzliche Anführungszeichen --query
durchlaufen wird eval
. Sie erhalten die Fehlermeldung, da die vorhandenen einfachen Anführungszeichen nicht als Teil des Werts weitergegeben werden. In der von mir vorgeschlagenen Lösung werden die doppelten Anführungszeichen weitergegeben, sodass die Abfrage immer noch in Anführungszeichen steht, wenn sie durch eval läuft.