Direnv - Administrar variables de entorno específicas del proyecto en Linux


direnv es una ingeniosa extensión de código abierto para su shell en un sistema operativo UNIX como Linux y macOS. Está compilado en un solo ejecutable estático y admite shells como bash, zsh, tcsh y fish.

El propósito principal de direnv es permitir variables de entorno específicas del proyecto sin saturar ~/.profile o archivos de inicio de shell relacionados. Implementa una nueva forma de cargar y descargar variables de entorno según el directorio actual.

Se utiliza para cargar aplicaciones de 12 factores (una metodología para crear aplicaciones de software como servicio), variables de entorno, crear entornos de desarrollo aislados por proyecto y también cargar secretos para la implementación. Además, se puede utilizar para crear soluciones de administración e instalación de múltiples versiones similares a rbenv, pyenv y phpenv.

Entonces, ¿cómo funciona direnv?

Antes de que el shell cargue un símbolo del sistema, direnv verifica la existencia de un archivo .envrc en el directorio actual (que puede mostrar usando el comando pwd) y principal. El proceso de verificación es rápido y no se nota en cada solicitud.

Una vez que encuentra el archivo .envrc con los permisos apropiados, lo carga en un sub-shell bash y captura todas las variables exportadas y las pone a disposición del shell actual.

Instalación de direnv en sistemas Linux

En la mayoría de las distribuciones de Linux, el paquete direnv está disponible para instalar desde los repositorios predeterminados usando el administrador de paquetes del sistema como se muestra.

$ sudo apt install direnv		#Debian,Ubuntu and Mint
$ sudo dnf install direnv		#Fedora

En otras distribuciones como Red Hat Enterprise Linux (RHEL) y CentOS o cualquier distribución que admita snapd instalado en su sistema.

$ sudo snap install direnv

Cómo conectar direnv en su Bash Shell

Después de instalar direnv, debe conectarlo a su shell Linux actual. Por ejemplo, para Bash, agregue la siguiente línea al final del archivo ~/.bashrc .

Asegúrese de que aparezca incluso después de rvm, git-prompt y otras extensiones de shell que manipulen el indicador.

eval "$(direnv hook bash)"

Agregue la siguiente línea al final del archivo ~/.zshrc :

eval "$(direnv hook zsh)" 

Agregue la siguiente línea al final del archivo ~/.config/fish/config.fish :

eval (direnv hook fish)

Luego cierre la ventana de terminal activa y abra un nuevo shell o obtenga el archivo como se muestra.

$ source ~/.bashrc
$ source  ~/.zshrc 
$ source ~/.config/fish/config.fish

Cómo usar direnv en Linux Shell

Para demostrar cómo funciona direnv, crearemos un nuevo directorio llamado tecmint_projects y nos trasladaremos a él.

$ mkdir ~/tecmint_projects
$ cd tecmint_projects/

A continuación, creemos una nueva variable llamada TEST_VARIABLE en la línea de comando y cuando se repita, el valor debe estar vacío:

$ echo $TEST_VARIABLE

Ahora crearemos un nuevo archivo .envrc que contiene código Bash que será cargado por direnv. También intentamos agregar la línea "exportar el TEST_VARIABLE u003d tecmint" usando el comando echo y el carácter de redirección de salida (>) :

$ echo export TEST_VARIABLE=tecmint > .envrc

De forma predeterminada, el mecanismo de seguridad bloquea la carga del archivo .envrc . Como sabemos que es un archivo seguro, debemos aprobar su contenido ejecutando el siguiente comando:

$ direnv allow .

Ahora que se ha permitido cargar el contenido del archivo .envrc , verifiquemos el valor de TEST_VARIABLE que establecimos antes:

$ echo $TEST_VARIABLE

Cuando salgamos del directorio tecmint_project , el direnv se descargará y si comprobamos el valor de TEST_VARIABLE una vez más, debería estar vacío:

$ cd ..
$ echo $TEST_VARIABLE

Cada vez que ingrese al directorio tecmint_projects, el archivo .envrc se cargará como se muestra en la siguiente captura de pantalla:

$ cd tecmint_projects/

Para revocar la autorización de un .envrc dado, use el comando deny.

$ direnv deny .			#in current directory
OR
$ direnv deny /path/to/.envrc

Para obtener más información e instrucciones de uso, consulte la página del manual de direnv:

$ man direnv

Además, direnv también usa un stdlib (direnv-stdlib) que viene con varias funciones que le permiten agregar fácilmente nuevos directorios a su PATH y hacer mucho más.

Para encontrar la documentación de todas las funciones disponibles, consulte la página de entrada del manual de direnv-stdlib:

$ man direnv-stdlib

¡Eso es todo lo que teníamos para ti! Si tiene alguna pregunta o idea para compartir con nosotros, utilice el formulario de comentarios a continuación.