Las secuencias de comandos bash y fish no son compatibles, pero me gustaría tener un archivo que defina algunas variables de entorno que bash y fish inicializarán.
Mi solución propuesta es definir un ~/.env
archivo que contenga la lista de variables de entorno de esta manera:
PATH="$HOME/bin:$PATH"
FOO="bar"
Entonces podría simplemente buscarlo en bash y hacer un script que lo convierta al formato de pescado y lo haga en pescado.
Estaba pensando que puede haber una solución mejor que esta, así que estoy pidiendo una mejor manera de compartir las variables de entorno entre los peces bash.
Nota: estoy usando OS X.
Aquí hay un .env
archivo de ejemplo que me gustaría que fish y bash manejen usando la sintaxis de ridiculous-fish (supongamos que ~ / bin y ~ / bin2 son directorios vacíos):
setenv _PATH "$PATH"
setenv PATH "$HOME/bin"
setenv PATH "$PATH:$HOME/bin2"
setenv PATH "$PATH:$_PATH"
fuente
PATH
solución para peces funcionará con caminos con espacios? nuevas líneas? otras cosas a tener en cuenta?[
es una función incorporada tanto en bash como en peces, por lo que no es necesario que la RUTA esté configurada correctamente para su uso[
. La muestra setenv debería funcionar con todos los caracteres en RUTA, excepto los dos puntos y las nuevas líneas.tr
con/usr/bin/tr
I y usando el.env
archivo provisto en mi pregunta, recibo muchos errores al comenzar a pescar. No creo que el manejo de la RUTA sea correcto.Hay (ahora?) Una manera más fácil, según la respuesta de @ Zanchey aquí
Fish Shell: Cómo configurar múltiples variables de entorno desde un archivo usando exportar
Sin embargo, el resumen es:
Pescado:
echo -e "foo=3\nfoobar=4" > .env; export (cat .env); env | grep foo
Golpetazo:
echo -e "foo=3\nfoobar=4" > .env; export $(cat .env | xargs); env | grep foo
con la diferencia de ser
$
y el uso dexargs
fuente
La mayoría de los sistemas Unix usan PAM . El
pam_env
módulo lee un archivo muy parecido a tu.env
.En Linux ,
pam_env
lee un archivo de sistema/etc/environment
y un archivo de usuario~/.pam_environment
. En OS X (y otros * BSD, que también usan OpenPAM), parece quepam_env
solo lee el archivo del sistema, por lo que no puede establecer variables por usuario de esta manera, solo para todos los usuarios.fuente
Ampliando la respuesta de @ ridiculous_fish, con la siguiente función para bash también funciona para matrices que contienen espacios, como
$PATH
si tiene espacios en sus caminos. Sin embargo,setenv
ya está definido como una función en la biblioteca estándar de peces hoy en día, así que cambié el nombre aquí ashenv
Ahora en su
.env
archivo puede especificar componentes de la matriz como argumentos separados para elsetenv
comando:Para la implementación simple de fish @ ridiculous_fish se hará:
fuente
Simplemente cree una función en $ HOME / .config / fish / functions / env.fish con contenido:
compartió todos los vars creados en bash en la carpeta /etc/profile.d
por ejemplo: /etc/profile.d/golang.sh
simplemente inicie sesión en fish o bash, haga
echo $GOPATH $GOROOT $GOBIN $PATH
y vea la magia :)fuente