J'essaie d'effectuer le rlocation de variable d'environnement via envsubst
, mais je veux seulement replace des variables spécifiques.
D'après les documents, je devrais pouvoir dire à envsubst
de ne replace que certaines variables mais je ne parviens pas à le faire.
Par exemple, si j'ai un file contenant:
VAR_1=${VAR_1} VAR_2=${VAR_2}
comment dois-je exécuter envsubst
pour qu'il remplace seulement la reference à ${VAR_1}
?
Avant d'appeler envsubst
utilisez export et utilisez des VAR1
pour récupérer VAR1
modifié. Comme dans:
export VAR1='somevalue'
Pour plus de détails, veuillez consulter:
Comment substituer des variables shell dans des files text 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 substituées; sinon toutes les references de variables d'environnement apparaissant dans l'input standard sont remplacées.
Où les strings SHELL-FORMAT sont des strings avec des references aux variables shell sous la forme $variable
ou ${variable}
[…] Les noms de variables doivent être constitués uniquement de caractères ASCII alphanumériques ou de soulignement, ne pas commencer par un chiffre et être non vides; sinon une telle reference de variable est ignorée. " .
Donc, on doit passer les noms des variables respectives à envsubst
dans une string de format shell (évidemment, ils doivent être échappés / quoted pour être transmis littéralement à envsubst
). Exemple:
file d'input par exemple infile
:
VAR1=${VAR1} VAR2=${VAR2} VAR3=${VAR3}
et certaines valeurs comme
export VAR1="one" VAR2="two" VAR3="three"
puis en cours
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}