Búsqueda de sitios web

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 único ejecutable estático y admite shells como bash, zsh, tcsh y fish.

El objetivo 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 variables de entorno de aplicaciones 12factor (una metodología para crear aplicaciones de software como servicio), 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 instalación y administración de múltiples versiones similares a rbenv, pyeenv 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 mensaje.

Una vez que encuentra el archivo .envrc con los permisos adecuados, lo carga en un subshell 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 utilizando 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 instantáneas, puede instalarlo como chasquido. Esto requiere que tengas instalado Snapd en tu sistema.

sudo snap install direnv

Cómo conectar direnv a tu shell Bash

Después de instalar direnv, debe conectarlo a su shell de 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 manipulan el mensaje.

eval "$(direnv hook bash)"

Para carcasa ZSH

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

eval "$(direnv hook zsh)" 

Para concha de PESCADO

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 utilizar direnv en el shell de Linux

Para demostrar cómo funciona direnv, crearemos un nuevo directorio llamado tecmint_projects y entraremos en é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 repite, 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 TEST_VARIABLE=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 configuramos 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 acceda 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 determinado, utilice 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 de manual de direnv:

man direnv

Además, direnv también utiliza 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 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.