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}
?
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
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}