2017-09-26 2 views
0

Problème avec la détection des guillemets et des supports dans le script bash L'exécution de cetteProblème avec la détection des guillemets et accolades dans le script sarrasins

a="{\'copa\':\'copa2\'}" 
print "$a" 

Le résultat est:

{'copa':'copa2'} 

L'utilisation d'un dans une commande sh ajoute quotes arrount aws_instance_tag instruction et supprime les guillemets simples pour les valeurs de copa

sh "ansible-playbook playbooks/environment-provisioning.yml -e env=perf -e num_injectors_zone_a=2 -t performance_services -e aws_instance_tags=${a} " 

Résultat

ansible-playbook playbooks/environment-provisioning.yml -e env=perf -e 
num_injectors_zone_a=2 -t performance_services -e 
'aws_instance_tags={copa:copa2}' 
+0

Cela ne devrait pas fonctionner comme votre allez passer la chaîne entre guillemets comme un argument/fichier sh. En supposant que vous utilisiez '-c' et que ce soit une faute de frappe, votre variable subit deux fois l'expansion du shell, une fois passée à sh, et une fois lors de l'exécution, supprimant les guillemets. – 123

Répondre

0

Au lieu de stringifying la commande, essayez d'utiliser un tableau:

# define the array 
cmd=(
    ansible-playbook 
    playbooks/environment-provisioning.yml 
    -e env=perf 
    -e num_injectors_zone_a=2 
    -t performance_services 
    -e aws_instance_tags="$a" 
) 
# then run it 
"${cmd[@]}"