Direnv - Ṣakoso awọn Awọn iyipada Ayika-Specific Ayika akanṣe ni Linux


direnv jẹ itẹsiwaju orisun ṣiṣi silẹ fun ikarahun rẹ lori ẹrọ ṣiṣe UNIX bii Lainos ati macOS. O ti ṣajọ sinu iṣuu aimi kan ṣoṣo ati atilẹyin awọn ota ibon nlanla bii bash, zsh, tcsh, ati ẹja.

Idi akọkọ ti direnv ni lati gba laaye fun awọn oniyipada agbegbe-akanṣe akanṣe laisi ipọnju ~/.profile tabi awọn faili ibẹrẹ ikarahun ti o ni ibatan. O ṣe ọna tuntun lati gbe ati gbe awọn oniyipada ayika pada da lori itọsọna lọwọlọwọ.

O ti lo lati fifuye awọn ohun elo 12factor (ilana fun sisọ awọn ohun elo sọfitiwia-bi-iṣẹ) awọn oniyipada agbegbe, ṣẹda awọn agbegbe idagbasoke sọtọ fun iṣẹ akanṣe, ati tun gbe awọn aṣiri fun imuṣiṣẹ. Ni afikun, o le lo lati kọ fifi sori ẹrọ ẹya pupọ ati awọn solusan iṣakoso ti o jọra rbenv, pyenv, ati phpenv.

Nitorinaa Bawo ni direnv N ṣiṣẹ?

Ṣaaju ki ikarahun kojọpọ iyara aṣẹ, direnv ṣayẹwo fun aye ti .envrc faili ninu lọwọlọwọ (eyiti o le ṣe afihan nipa lilo aṣẹ pwd) ati itọsọna obi. Ilana yiyewo yara ati pe a ko le ṣe akiyesi lori iyara kọọkan.

Ni kete ti o ba wa faili .envrc pẹlu awọn igbanilaaye ti o yẹ, o ko ẹrù rẹ sinu ikarahun kekere-bash kan ati pe o gba gbogbo awọn oniye okeere ti o mu ki wọn wa si ikarahun lọwọlọwọ.

Fifi sori ẹrọ direnv ni Awọn ọna Linux

Ni ọpọlọpọ awọn pinpin kaakiri Linux, package direnv wa lati fi sori ẹrọ lati awọn ibi ipamọ aiyipada nipa lilo oluṣakoso package eto rẹ bi o ti han.

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

Lori awọn kaakiri miiran bii Red Hat Enterprise Linux (RHEL) ati CentOS tabi eyikeyi pinpin ti o ṣe atilẹyin snapd ti a fi sori ẹrọ rẹ.

$ sudo snap install direnv

Bawo ni lati kio direnv sinu Rẹ Bash ikarahun

Lẹhin fifi direnv sii, o nilo lati mu u sinu ikarahun Linux lọwọlọwọ rẹ. Fun apẹẹrẹ fun Bash, ṣafikun laini atẹle ni ipari faili ~/.bashrc .

Rii daju pe o han paapaa lẹhin rvm, git-tọ, ati awọn amugbooro ikarahun miiran ti o ṣe afọwọyi tọ.

eval "$(direnv hook bash)"

Fikun ila ti o tẹle ni ipari ~/.zshrc faili:

eval "$(direnv hook zsh)" 

Fikun ila ti o tẹle ni ipari ~/.config/fish/config.fish faili:

eval (direnv hook fish)

Lẹhinna pa ferese ebute ti nṣiṣe lọwọ ki o ṣii ikarahun tuntun tabi orisun faili bi o ti han.

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

Bii o ṣe le Lo direnv ni Ikarahun Linux

Lati ṣe afihan bi direnv ṣe n ṣiṣẹ, a yoo ṣẹda itọsọna tuntun ti a pe ni tecmint_projects ati gbe sinu rẹ.

$ mkdir ~/tecmint_projects
$ cd tecmint_projects/

Itele, jẹ ki a ṣẹda oniyipada tuntun ti a pe ni TEST_VARIABLE lori laini aṣẹ ati nigbati o ba ti gbọ, iye yẹ ki o ṣofo:

$ echo $TEST_VARIABLE

Bayi a yoo ṣẹda tuntun .envrc faili ti o ni koodu Bash ti yoo gbe nipasẹ direnv. A tun gbiyanju lati ṣafikun laini\"gbejade TEST_VARIABLE = tecmint" ninu rẹ nipa lilo pipaṣẹ iwoyi ati ohun kikọ itọsọna redirection (>) :

$ echo export TEST_VARIABLE=tecmint > .envrc

Nipa aiyipada, ẹrọ aabo ṣe idiwọ ikojọpọ ti faili .envrc . Niwọn igba ti a ti mọ pe o jẹ faili to ni aabo, a nilo lati fọwọsi akoonu rẹ nipa ṣiṣe pipaṣẹ wọnyi:

$ direnv allow .

Bayi pe akoonu ti .envrc ti gba laaye lati fifuye, jẹ ki a ṣayẹwo iye TEST_VARIABLE ti a ṣeto ṣaaju:

$ echo $TEST_VARIABLE

Nigbati a ba jade kuro ni itọsọna tecmint_project , direnv yoo gbejade ati ti a ba ṣayẹwo iye ti TEST_VARIABLE lẹẹkan si, o yẹ ki o ṣofo:

$ cd ..
$ echo $TEST_VARIABLE

Ni gbogbo igba ti o ba lọ sinu ilana tecmint_projects, faili .envrc yoo di fifuye bi o ṣe han ninu sikirinifoto atẹle:

$ cd tecmint_projects/

Lati fagile aṣẹ ti a fun .envrc , lo aṣẹ sẹ.

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

Fun alaye diẹ sii ati awọn itọnisọna lilo, wo oju-iwe eniyan direnv:

$ man direnv

Ni afikun, direnv tun lo stdlib kan (direnv-stdlib) wa pẹlu awọn iṣẹ pupọ ti o gba ọ laaye lati ṣafikun awọn ilana tuntun si PATH rẹ ati ṣe pupọ diẹ sii.

Lati wa iwe fun gbogbo awọn iṣẹ to wa, ṣayẹwo oju-iwe titẹsi ọwọ ọwọ direnv-stdlib:

$ man direnv-stdlib

Iyẹn ni gbogbo ohun ti a ni fun ọ! Ti o ba ni ibeere eyikeyi tabi awọn ero lati pin pẹlu wa, lo fọọmu esi ni isalẹ.