Remplacement de variables spécifiques uniquement par envsubst


54

J'essaie de remplacer les variables d'environnement par le biais envsubst, mais je veux seulement remplacer des variables spécifiques.

D'après la documentation, je devrais pouvoir dire envsubstde ne remplacer que certaines variables, mais je ne parviens pas à le faire.

Par exemple, si j'ai un fichier contenant:

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

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

Réponses:



131

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 aux variables d'environnement apparaissant dans l'entrée standard sont substituées.

Où les chaînes SHELL-FORMAT sont des "chaînes avec des références à des variables de shell sous la forme $variableou ${variable}[...] ignoré. " .
Donc, il faut passer les noms des variables respectives envsubstdans une chaîne de formatage (évidemment, ils doivent être échappés / cités pour pouvoir être passés littéralement à envsubst). Exemple:

fichier d'entrée par exemple infile:

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

et des valeurs comme

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

puis courir

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 une barre oblique inverse:

envsubst \$VAR1,\$VAR2 <infile

produit

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

14
pourquoi n'est-ce pas la réponse acceptée?
Qsiris

3
Oui c'est la bonne réponse!
Thomas Decaux

3
Si vous connaissez un préfixe de variable à utiliser pour limiter les variables pouvant être substituées:envsubst "$(printf '${%s} ' ${!PREFIX*})" < infile
Sam Liddicott le

Ou si vous en avez une liste à ce moment- SUBST_VARSlà:envsubst "$(printf '${%s} ' $SUBST_VARS)" < infile
Sam Liddicott
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.