2015-10-14 3 views
3

déconner avec une simple requête cli aws pour vérifier l'existence d'une fonction Lambda et l'écho du rôle associé si elle existe:JMESPath expression de requête avec la variable bash

#!/bin/bash 

fname=$1 
role=$(aws lambda list-functions --query 'Functions[?FunctionName == `$fname`].Role' --output text) 

echo "$fname role: $role" 

Cependant, $ fname semble être la résolution à une chaîne vide dans la commande aws. J'ai essayé d'échapper les tics de retour, permutant `à 'et un miriad d'autres éditions renversantes (et oui, je passe une chaîne sur le cl en invoquant le manuscrit :)

Comment je passe correctement une variable dans la requête JMESPath dans un script bash?

Répondre

8

Étant donné que l'expression JMESPath entière est entourée de guillemets simples, bash ne développe pas la variable $fname. Pour résoudre ce problème, vous pouvez entourer la valeur avec des guillemets doubles puis utiliser des guillemets simples (raw string literals) pour le $fname var:

aws lambda list-functions --query "Functions[?FunctionName == '$fname'].Role" --output text 
+0

parfait. Merci! – TomH

0

Permutation les accents graves à des guillemets simples, ne fonctionne pas pour moi ... :(

Mais échapper aux accents graves fonctionne :)

Voici mes sorties:

aws elbv2 describe-listeners --load-balancer-arn $ELB_ARN --query "Listeners[?Port == '$PORT'].DefaultActions[].TargetGroupArn | [0]" 

null

aws elbv2 describe-listeners --load-balancer-arn $ELB_ARN --query "Listeners[?Port == \`$PORT\`].DefaultActions[].TargetGroupArn | [0]" 

"arn: aws: elasticloadbalancing: ap-sud-2: 1.234.567: Groupe cible/xxx"