2017-08-23 3 views
1

J'ai un fichier (env/api.env) avec mes variables d'environnement nœud et je suis en cours d'exécution de ce script bash pour publier les variables:script NODE des variables d'environnement fonctionne en bash, mais pas dans zsh

export $(cat env/api.env | grep -v ^#) 

Si je tente de exécutez-le dans zsh au lieu de bash cela ne fonctionnera pas. Les variables ne seront simplement pas publiées et resteront indéfinies.

Comment faire un script qui s'exécute à la fois dans bash/zsh?

+0

Que diriez-vous d'un échantillon du contenu du fichier? – ghoti

+0

Est-ce juste un ensemble de variables telles que: DB_HOST = localhost DB_PORT = 3307 DB_TEST_HOST = localhost DB_TEST_PORT = 3308 – armova

+0

Il est pertinent. S'il vous plaît [ajoutez-le à votre question] (https://stackoverflow.com/posts/45828944/edit). – ghoti

Répondre

1

Vous avez apparemment l'option de zsh extendedglob (Alias ​​EXTENDED_GLOB dans ZSHEXPN(1)) L'ensemble, qui traite le ^ comme non échappés coquille glob négateur - avant qu'il ne soit à grep. C'est une belle option Zsh et vaut la peine d'activer IMO, mais vous devez citer un peu plus souvent.

Ainsi, votre approche devrait fonctionner si vous écrivez comme:

% export $(grep -v '^#' env/api.env) 

Cependant, vous êtes sûr de laisser juste api.env être une simple coquille (zsh et Bash compatible) fichier de sorte que vous n'avez pas pour analyser maladroitement les commentaires et autres. Ensuite, il est juste:

% source env/api.env 

source est préféré . dans ce cas, puisque vous travaillez à partir le répertoire courant.


L'esprit de ce que vous accomplissez est bien géré par des outils tels que direnv et dotenv.

+0

Pourriez-vous aller plus de détails sur 'source'-vs-'.'? En bash, les docs l'ont comme un alias avec exactement la même implémentation, mais dans POSIX sh, seul '.' est spécifié (ce qui en fait l'option la plus portable). Est-ce que zsh fait quelque chose de différent? –

+1

Oui, 'source' et' .' sont identiques dans Bash, mais Zsh les distingue légèrement. Dans ZSHBUILTINS (1) pour 'source', nous voyons:" Same as '.', sauf que le répertoire courant est toujours recherché et est toujours recherché en premier, avant les répertoires dans $ path. " –