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.