2017-12-22 11 views
0

Ich versuche, die Ausgabe von AWS cli mit jq wo die jq Abfrage enthält Bash Variablen zu analysieren und durch the --arg switch wie so mit:Wie aws-cli-Ausgabe mit jq, das Argumente enthält, mithilfe des Befehls -arg parsen?

$ aws ec2 describe-instances --region $region | jq --arg environment "$Environment" --arg br "$BUILD_NUMBER" --arg app "$App" -r '.Reservations[].Instances[].Tags[]?.Value | select(startswith("Company-$environment-$br-$app") 

ich eine neue Zeile, wenn ich den Befehl ausführen.

Dies ist der Ausgang, wenn ich hart automatische Skalierung Gruppennamen codiert verwenden:

[email protected] ~/Downloads - $ aws ec2 describe-instances --region $region | jq --arg environment "$Environment" --arg br "$BUILD_NUMBER" --arg app "$App" -r '.Reservations[].Instances[].Tags[]?.Value | select(startswith("Company-Dev-60-Api"))' 
Company-Dev-60-ApiServersASG-19L10K16RUXTE 
Company-Dev-60-ApiServersASG-19L10K16RUXTE 
[email protected] ~/Downloads - $ 

Sie können die Werte der Variablen sehen gesetzt sind:

[email protected] ~/Downloads - $ echo $Environment 
Dev 
[email protected] ~/Downloads - $ echo $App 
Api 
[email protected] ~/Downloads - $ echo $BUILD_NUMBER 
60 

Also, was mache ich falsch?

Antwort

2

Die jq-Sprache hat ihre eigene Art, Variablen zu kombinieren. In jq, der Ausdruck, den Sie geschrieben haben:

"Company-$environment-$br-$app" 

ist nur eine Vanille JSON-Zeichenfolge.

Eine Option wäre jq die Unterstützung für die Interpolation zu verwenden:

"Company-\($environment)-\($br)-\($app)" 

Eine weitere Option jq die Zeichenfolge-Verkettungsoperator zu verwenden wäre, +.

Sie könnten auch join("-") verwenden. Und so weiter.

Verwandte Themen