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 ~/.envarchivo 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 .envarchivo 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

PATHsolució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.trcon/usr/bin/trI y usando el.envarchivo 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 fooGolpetazo:
echo -e "foo=3\nfoobar=4" > .env; export $(cat .env | xargs); env | grep foocon la diferencia de ser
$y el uso dexargsfuente
La mayoría de los sistemas Unix usan PAM . El
pam_envmódulo lee un archivo muy parecido a tu.env.En Linux ,
pam_envlee un archivo de sistema/etc/environmenty un archivo de usuario~/.pam_environment. En OS X (y otros * BSD, que también usan OpenPAM), parece quepam_envsolo 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
$PATHsi tiene espacios en sus caminos. Sin embargo,setenvya está definido como una función en la biblioteca estándar de peces hoy en día, así que cambié el nombre aquí ashenvAhora en su
.envarchivo puede especificar componentes de la matriz como argumentos separados para elsetenvcomando: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 $PATHy vea la magia :)fuente