J’ai besoin de mettre des valeurs de variables d’environnement à classer.
cat file # $VAR echo $VAR # text
Lorsque je fais envsubst '$VAR $VAR' file
fichier devient vide. Pour résoudre ce problème, j’utilise envsubst '$VAR $VAR' &1 >/dev/null
envsubst '$VAR $VAR' &1 >/dev/null
. Mais parfois ça ne marche pas, je veux dire que le fichier devient vide. La première question est de savoir pourquoi parfois le fichier est vide et le second est quel est le moyen TRUE Unix de mettre env vars dans Linux et * BSD et MacOS?
Le shell traite toujours la redirection de sortie, qui tronque le fichier, avant de lancer la commande.
Avec le pipeline envsubst ... < file | tee file
envsubst ... < file | tee file
, les deux commandes envsubst
et tee
exécutées de manière asynchrone , ce qui signifie que le système d'exploitation est libre de démarrer l'une ou l'autre des commandes. En gros, vous lancez les dés que envsubst
exécute et lit le file
avant que le tee
exécuté et ne tronque le fichier.
La seule solution correcte consiste à écrire dans un fichier temporaire, puis à remplacer l'original par le fichier temporaire après avoir confirmé que la commande a réussi.