2017-08-10 3 views
2

Il y a beaucoup d'exemples ici comment source un fichier dotenv dans bash mais a quelqu'un une méthode qui réalise la même chose avec le tiret (qui est le shell par défaut pour les installations minimales de Debian)?Comment rechercher un fichier dotenv (.env) dans un tiret?

La solution devrait ressembler à ceci:

$ some foo my-command-using-env-vars 

par exemple

$ env $(cat .env) my-command-using-env-vars 

Et il est important que la solution prend en charge les valeurs multilignes avec des espaces tels que:

SSH_PRIVATE_KEY="-----BEGIN RSA PRIVATE KEY-----\nfoo\nbar\baz" 

et des caractères spéciaux comme hachage entre guillemets:

SPECIAL="foo#bar" 

Répondre

2

Il semble que votre problème n'est pas tellement que vous utilisez dash mais que vous voulez soutenir \n échappe. Les travaux suivants dash et soutient \n échappe:

eval "$(echo $(cat .env))" my-command-using-env-vars 

En effet, contrairement à la bash intégré echo dans dash soutient antislash échappe même sans l'option -e. Les travaux suivants dans les deux bash et dash, à condition que la non-intégré, système echo prend en charge l'option -e:

eval "$(env echo -e $(cat .env))" my-command-using-env-vars 

Notez que les deux approches se chargeront également d'autres antislash échappe (soit POSIX ou GNU), peut-être d'une manière différente de ce que vous attendez.

Quelques notes techniques:

$(cat .env) 

PERFORMs Field Splitting, la conversion de tout fichier dans .env nouvelle ligne dans les espaces.

"$(env echo -e ...)" 

développe barre oblique inverse échappe indépendamment de l'enveloppe de courant en invoquant echo -e via env. Les guillemets doubles désactivent le fractionnement des champs, de sorte que les retours à la ligne sont conservés.

+0

Merci pour la solution! Juste pour les curieux, comment exactement les autres fuites d'antislash seront traitées dans les cas ci-dessus? –

+0

@BastianVenthur Jetez un oeil aux pages de manuel 'dash' et' bash' et recherchez les commandes intégrées. Pour 'env echo', voir la page de manuel' echo'. – nwellnhof