les scripts bash et fish ne sont pas compatibles, mais j'aimerais avoir un fichier qui définit certaines variables d'environnement à initialiser à la fois par bash et fish.
Ma solution proposée consiste à définir un ~/.env
fichier qui contiendrait la liste des variables d'environnement comme ceci:
PATH="$HOME/bin:$PATH"
FOO="bar"
Je pourrais alors simplement le source en bash et faire un script qui le convertit au format poisson et les sources que dans poisson.
Je pensais qu'il pourrait y avoir une meilleure solution que cela, alors je demande une meilleure façon de partager les variables d'environnement entre les poissons bash.
Remarque: j'utilise OS X.
Voici un exemple de .env
fichier que je voudrais que fish et bash manipulent en utilisant la syntaxe de ridiculous-fish (supposons que ~ / bin et ~ / bin2 sont des répertoires vides):
setenv _PATH "$PATH"
setenv PATH "$HOME/bin"
setenv PATH "$PATH:$HOME/bin2"
setenv PATH "$PATH:$_PATH"
PATH
solution pour les poissons fonctionnera-t-elle avec des chemins avec: des espaces? nouvelles lignes? d'autres choses à surveiller?[
est intégré à la fois à bash et à fish, donc PATH ne devrait pas avoir besoin d'être configuré correctement pour être utilisé[
. L'exemple setenv doit fonctionner avec tous les caractères dans PATH à l'exception des deux-points et des retours à la ligne.tr
par/usr/bin/tr
I et utiliser le.env
fichier fourni dans ma question, je reçois beaucoup d'erreurs lors du démarrage du poisson. Je ne pense pas que la gestion de PATH soit correcte.Il y a (maintenant?) Un moyen plus simple, selon la réponse de @ Zanchey ici
Fish Shell: comment définir plusieurs variables d'environnement à partir d'un fichier à l'aide de l'exportation
Le résumé est cependant:
Poisson:
echo -e "foo=3\nfoobar=4" > .env; export (cat .env); env | grep foo
Frapper:
echo -e "foo=3\nfoobar=4" > .env; export $(cat .env | xargs); env | grep foo
avec la différence étant
$
et l'utilisation dexargs
la source
La plupart des systèmes Unix utilisent PAM . Le
pam_env
module lit un fichier très semblable au vôtre.env
.Sous Linux ,
pam_env
lit un fichier système/etc/environment
et un fichier utilisateur~/.pam_environment
. Sur OS X (et autres * BSD, qui utilisent également OpenPAM), il semble quepam_env
seul le fichier système soit lu, vous ne pouvez donc pas définir des variables par utilisateur de cette façon, uniquement pour tous les utilisateurs.la source
En développant la réponse de @ ridiculous_fish, avec la fonction suivante pour bash, cela fonctionne également pour les tableaux qui contiennent des espaces, comme
$PATH
si vous avez des espaces dans vos chemins. Cependant,setenv
est déjà défini comme une fonction dans la bibliothèque standard de poissons de nos jours, j'ai donc changé le nom ici enshenv
Maintenant, dans votre
.env
fichier, vous pouvez spécifier les composants du tableau en tant qu'arguments séparés de lasetenv
commande:Pour la mise en œuvre simple de fish @ ridiculous_fish:
la source
Créez simplement une fonction dans $ HOME / .config / fish / functions / env.fish avec le contenu:
partagé tous les vars créés dans bash dans le dossier /etc/profile.d
par exemple: /etc/profile.d/golang.sh
connectez-vous simplement sur fish ou bash, faites
echo $GOPATH $GOROOT $GOBIN $PATH
et voyez la magie :)la source