Pourquoi la réécriture d’un fichier avec “envsubst fichier” le laisse-t-il vide?

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.