Saltar al contenido

Compartir variables de entorno entre bash y fish

Este dilema se puede resolver de diversas maneras, pero nosotros te damos la que para nosotros es la respuesta más completa.

Solución:

bash tiene una sintaxis especial para establecer variables de entorno, mientras que fish usa una función incorporada. Sugeriría escribir su archivo .env así:

setenv VAR1 val1
setenv VAR2 val2

y luego definiendo setenv apropiadamente en las respectivas conchas. En bash (por ejemplo, .bashrc):

function setenv()  export "$1=$2"; 
. ~/.env

En pescado (por ejemplo, config.fish):

function setenv; set -gx $argv; end
source ~/.env

Tenga en cuenta que PATH requerirá un manejo especial, ya que es un array en pescado pero un colon delimitado string en bash. Si prefieres escribir setenv PATH "$HOME/bin:$PATH" en .env, podrías escribir setenv de fish así:

function setenv
    if [ $argv[1] = PATH ]
        # Replace colons and spaces with newlines
        set -gx PATH (echo $argv[2] | tr ': ' n)
    else
        set -gx $argv
    end
 end

Esto manejará mal los elementos en PATH que contengan espacios, dos puntos o saltos de línea.

La incomodidad en PATH se debe a la mezcla de cadenas delimitadas por dos puntos con true arreglos La forma preferida de agregar a PATH en fish es simplemente set PATH $PATH ~/bin.

La mayoría de los sistemas Unix usan PAM. los pam_env módulo lee un archivo muy parecido a su .env.

En Linux, pam_env lee un archivo del sistema /etc/environment y un archivo de usuario ~/.pam_environment. En OS X (y otros *BSD, que también usan OpenPAM), parece que pam_env solo lee el archivo del sistema, por lo que no puede establecer variables por usuario de esta manera, solo para todos los usuarios.

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 mediante la exportación

Sin embargo, el resumen es:

Pez:

echo -e "foo=3nfoobar=4" > .env; export (cat .env); env | grep foo

Intento:

echo -e "foo=3nfoobar=4" > .env; export $(cat .env | xargs); env | grep foo

siendo la diferencia $ y el uso de xargs

Comentarios y valoraciones de la guía

Eres capaz de corroborar nuestro quehacer ejecutando un comentario o dejando una valoración te damos las gracias.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *