Vyhledávání na webu

Direnv – Správa proměnných prostředí specifických pro projekt v Linuxu


direnv je šikovné rozšíření s otevřeným zdrojovým kódem pro váš shell v operačním systému UNIX, jako je Linux a macOS. Je zkompilován do jediného statického spustitelného souboru a podporuje shelly jako bash, zsh, tcsh a fish.

Hlavním účelem direnv je umožnit proměnné prostředí specifické pro projekt bez zahlcení ~/.profile nebo souvisejících spouštěcích souborů shellu. Implementuje nový způsob načítání a uvolňování proměnných prostředí v závislosti na aktuálním adresáři.

Používá se k načítání proměnných prostředí aplikací 12factor (metodika pro vytváření aplikací typu software jako služba), vytváření izolovaných vývojových prostředí pro jednotlivé projekty a také načítání tajných klíčů pro nasazení. Kromě toho jej lze použít k vytváření řešení pro instalaci a správu více verzí podobných rbenv, pyenv a phpenv.

Jak tedy direnv funguje?

Než shell načte příkazový řádek, direnv zkontroluje existenci souboru .envrc v aktuálním (který můžete zobrazit pomocí příkazu pwd) a nadřazeném adresáři. Proces kontroly je rychlý a nelze si jej všimnout na každé výzvě.

Jakmile najde soubor .envrc s příslušnými oprávněními, načte jej do sub-shell bash a zachytí všechny exportované proměnné a zpřístupní je aktuálnímu shellu.

Instalace direnv v systémech Linux

Ve většině distribucí Linuxu je balíček direnv dostupný k instalaci z výchozích repozitářů pomocí vašeho systémového správce balíčků, jak je znázorněno.

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

V jiných distribucích, jako je Red Hat Enterprise Linux (RHEL) a CentOS nebo v jakékoli distribuci, která podporuje snapy, jej můžete nainstalovat jako přichytit. To vyžaduje, abyste měli v systému nainstalovaný snapd.

sudo snap install direnv

Jak připojit direnv do vaší Bash Shell

Po instalaci direnv jej musíte připojit k aktuálnímu prostředí Linuxu. Například pro Bash přidejte následující řádek na konec souboru ~/.bashrc.

Ujistěte se, že se objeví i po rvm, git-prompt a dalších rozšířeních prostředí, která s výzvou manipulují.

eval "$(direnv hook bash)"

Pro ZSH Shell

Na konec souboru ~/.zshrc připojte následující řádek:

eval "$(direnv hook zsh)" 

Pro FISH Shell

Připojte následující řádek na konec souboru ~/.config/fish/config.fish:

eval (direnv hook fish)

Poté zavřete okno aktivního terminálu a otevřete nový shell nebo zdrojový soubor, jak je znázorněno.

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

Jak používat direnv v Linux Shell

Abychom předvedli, jak direnv funguje, vytvoříme nový adresář s názvem tecmint_projects a přesuneme se do něj.

mkdir ~/tecmint_projects
cd tecmint_projects/

Dále vytvořte novou proměnnou nazvanou TEST_VARIABLE na příkazovém řádku a po jejím odeznění by měla být hodnota prázdná:

echo $TEST_VARIABLE

Nyní vytvoříme nový soubor .envrc obsahující Bash kód, který načte direnv. Snažíme se do něj také přidat řádek „export TEST_VARIABLE=tecmint “ pomocí příkazu echo a znaku pro přesměrování výstupu (>):

echo export TEST_VARIABLE=tecmint > .envrc

Ve výchozím nastavení blokuje bezpečnostní mechanismus načítání souboru .envrc. Protože víme, že jde o bezpečný soubor, musíme jeho obsah schválit spuštěním následujícího příkazu:

direnv allow .

Nyní, když bylo povoleno načtení obsahu souboru .envrc, zkontrolujeme hodnotu TEST_VARIABLE, kterou jsme nastavili dříve:

echo $TEST_VARIABLE

Když opustíme adresář tecmint_project, direnv bude uvolněn a pokud znovu zkontrolujeme hodnotu TEST_VARIABLE, měl by být prázdný:

cd ..
echo $TEST_VARIABLE

Pokaždé, když se přesunete do adresáře tecmint_projects, načte se soubor .envrc, jak je znázorněno na následujícím snímku obrazovky:

cd tecmint_projects/

Chcete-li zrušit autorizaci daného souboru .envrc, použijte příkaz deny.

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

Další informace a pokyny k použití naleznete na manuálové stránce direnv:

man direnv

Kromě toho direnv také používá stdlib (direnv-stdlib) s několika funkcemi, které vám umožní snadno přidávat nové adresáře do vašeho PATHa dělat mnohem víc.

Chcete-li najít dokumentaci pro všechny dostupné funkce, podívejte se na stránku ručního zadávání direnv-stdlib:

man direnv-stdlib

To je vše, co jsme pro vás měli! Máte-li jakékoli dotazy nebo myšlenky, o které se s námi chcete podělit, použijte formulář pro zpětnou vazbu níže.