Ricerca nel sito web

Direnv: gestisci le variabili di ambiente specifiche del progetto in Linux


direnv è un'elegante estensione open source per la tua shell su un sistema operativo UNIX come Linux e macOS. È compilato in un singolo eseguibile statico e supporta shell come bash, zsh, tcsh e fish.

Lo scopo principale di direnv è consentire variabili di ambiente specifiche del progetto senza ingombrare ~/.profile o i relativi file di avvio della shell. Implementa un nuovo modo per caricare e scaricare le variabili di ambiente a seconda della directory corrente.

Viene utilizzato per caricare variabili di ambiente delle app 12factor (una metodologia per la creazione di app Software-as-a-Service), creare ambienti di sviluppo isolati per progetto e anche caricare segreti per la distribuzione. Inoltre, può essere utilizzato per creare soluzioni di installazione e gestione multiversione simili a rbenv, pyenv e phpenv.

Allora come funziona Direnv?

Prima che la shell carichi un prompt dei comandi, direnv controlla l'esistenza di un file .envrc nella directory corrente (che puoi visualizzare utilizzando il comando pwd) e principale. Il processo di controllo è rapido e non può essere notato ad ogni richiesta.

Una volta trovato il file .envrc con i permessi appropriati, lo carica in una sottoshell bash e cattura tutte le variabili esportate e le rende disponibili alla shell corrente.

Installazione di direnv nei sistemi Linux

Nella maggior parte delle distribuzioni Linux, il pacchetto direnv è disponibile per l'installazione dai repository predefiniti utilizzando il gestore pacchetti di sistema come mostrato.

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

Su altre distribuzioni come Red Hat Enterprise Linux (RHEL) e CentOS o qualsiasi distribuzione che supporti gli snap, puoi installarlo come scatta. Ciò richiede che tu abbia Snapd installato sul tuo sistema.

sudo snap install direnv

Come collegare Direnv alla tua Bash Shell

Dopo aver installato direnv, devi collegarlo alla tua attuale shell Linux. Ad esempio per Bash, aggiungi la seguente riga alla fine del file ~/.bashrc.

Assicurati che appaia anche dopo rvm, git-prompt e altre estensioni della shell che manipolano il prompt.

eval "$(direnv hook bash)"

Per coperture ZSH

Aggiungi la seguente riga alla fine del file ~/.zshrc:

eval "$(direnv hook zsh)" 

Per conchiglia di PESCE

Aggiungi la seguente riga alla fine del file ~/.config/fish/config.fish:

eval (direnv hook fish)

Quindi chiudi la finestra del terminale attiva e apri una nuova shell o esegui il source del file come mostrato.

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

Come utilizzare direnv nella shell Linux

Per dimostrare come funziona direnv, creeremo una nuova directory chiamata tecmint_projects e ci trasferiremo al suo interno.

mkdir ~/tecmint_projects
cd tecmint_projects/

Successivamente, creiamo una nuova variabile chiamata TEST_VARIABLE sulla riga di comando e quando viene ripetuta, il valore dovrebbe essere vuoto:

echo $TEST_VARIABLE

Ora creeremo un nuovo file .envrc che contiene il codice Bash che verrà caricato da direnv. Proviamo anche ad aggiungere la riga “esporta TEST_VARIABLE=tecmint” utilizzando il comando echo e il carattere di reindirizzamento dell'output (>):

echo export TEST_VARIABLE=tecmint > .envrc

Per impostazione predefinita, il meccanismo di sicurezza blocca il caricamento del file .envrc. Poiché sappiamo che si tratta di un file sicuro, dobbiamo approvarne il contenuto eseguendo il seguente comando:

direnv allow .

Ora che è stato consentito il caricamento del contenuto del file .envrc, controlliamo il valore di TEST_VARIABLE che abbiamo impostato prima:

echo $TEST_VARIABLE

Quando usciamo dalla directory tecmint_project, il direnv verrà scaricato e se controlliamo ancora una volta il valore di TEST_VARIABLE, dovrebbe essere vuoto:

cd ..
echo $TEST_VARIABLE

Ogni volta che ti sposti nella directory tecmint_projects, il file .envrc verrà caricato come mostrato nello screenshot seguente:

cd tecmint_projects/

Per revocare l'autorizzazione di un determinato .envrc, utilizzare il comando deny.

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

Per ulteriori informazioni e istruzioni sull'utilizzo, consultare la pagina man direnv:

man direnv

Inoltre, direnv utilizza anche una stdlib (direnv-stdlib) dotata di diverse funzioni che ti consentono di aggiungere facilmente nuove directory al tuo PATH e fare molto di più.

Per trovare la documentazione per tutte le funzioni disponibili, controlla la pagina di immissione manuale di direnv-stdlib:

man direnv-stdlib

Questo è tutto ciò che avevamo per te! Se hai domande o pensieri da condividere con noi, utilizza il modulo di feedback qui sotto.