web-dev-qa-db-fra.com

Remplacer uniquement des variables spécifiques par envsubst

J'essaie d'effectuer le remplacement des variables d'environnement via envsubst, mais je souhaite uniquement remplacer des variables spécifiques.

D'après les documents, je devrais être en mesure de dire à envsubst de ne remplacer que certaines variables, mais je n'arrive pas à le faire.

Par exemple, si j'ai un fichier contenant:

VAR_1=${VAR_1}
VAR_2=${VAR_2}

comment dois-je exécuter envsubst pour qu'il ne remplace que la référence à ${VAR_1}?

62
João Angelo

Avant d'appeler envsubst, vous devez utiliser l'exportation à l'aide de guillemets simples pour récupérer VAR_1 modifié. Un péché:

export VAR_1='somevalue'

Pour plus de détails, veuillez consulter:

Comment substituer des variables Shell dans des fichiers texte complexes

3
Rui F Ribeiro

Par la page de manuel:

envsubst [OPTION] [Shell-FORMAT]

Si un Shell-FORMAT est donné, seules les variables d'environnement référencées dans Shell-FORMAT sont remplacées; sinon, toutes les références de variables d'environnement présentes dans l'entrée standard sont remplacées.

Où les chaînes Shell-FORMAT sont "chaînes avec des références aux variables Shell sous la forme $variable ou ${variable} [...] Les noms des variables doivent être constitués uniquement de caractères alphanumériques ou de soulignement ASCII, ne pas commencer par un chiffre et ne pas être vide; sinon, une telle référence de variable est ignorée. ".
Donc, il faut passer les noms des variables respectives à envsubst dans une chaîne de format Shell (évidemment, ils doivent être échappés/cités pour être passés littéralement à envsubst ). Exemple:

fichier d'entrée par ex. infile:

VAR1=${VAR1}
VAR2=${VAR2}
VAR3=${VAR3}

et certaines valeurs comme

export  VAR1="one" VAR2="two" VAR3="three"

puis en cours d'exécution

envsubst '${VAR1} ${VAR3}' <infile

ou

envsubst '${VAR1},${VAR3}' <infile

ou

envsubst '${VAR1}
${VAR3}' <infile

les sorties

VAR1=one
VAR2=${VAR2}
VAR3=three

Ou, si vous préférez la barre oblique inverse:

envsubst \$VAR1,\$VAR2 <infile

produit

VAR1=one
VAR2=two
VAR3=${VAR3}
156
don_crissti