Direnv - Pagdumala sa Project-Specific Environment Variables sa Linux


Ang direnv usa ka nindot nga open-source extension para sa imong shell sa UNIX operating system sama sa Linux ug macOS. Kini gihugpong ngadto sa usa ka static executable ug nagsuporta sa mga kabhang sama sa bash, zsh, tcsh, ug isda.

Ang nag-unang katuyoan sa direnv mao ang pagtugot sa mga variable sa palibot nga espesipiko sa proyekto nga wala mag-cluttering ~/.profile o may kalabutan nga shell startup files. Nagpatuman kini og bag-ong paagi sa pagkarga ug pagdiskarga sa mga variable sa palibot depende sa kasamtangang direktoryo.

Gigamit kini sa pag-load sa 12factor apps (usa ka metodolohiya alang sa pagtukod sa software-as-a-service apps) nga mga variable sa palibot, paghimo sa matag-proyekto nga nahimulag nga development environment, ug usab sa pag-load sa mga sekreto para sa deployment. Dugang pa, mahimo kining gamiton sa paghimo og multi-version installation ug management solutions susama sa rbenv, pyenv, ug phpenv.

Busa Giunsa ang Pagtrabaho sa direnv?

Sa dili pa magkarga ang shell ug command prompt, susihon sa direnv kung adunay .envrc file sa kasamtangan (nga mahimo nimong ipakita gamit ang pwd command) ug direktoryo sa ginikanan. Ang proseso sa pagsusi paspas ug dili mamatikdan sa matag prompt.

Sa higayon nga makit-an na niini ang .envrc file nga adunay tukma nga permiso, i-load kini sa usa ka bash sub-shell ug makuha niini ang tanang gi-eksport nga mga variable ug himoon kini nga magamit sa kasamtangang shell.

Pag-instalar sa direnv sa Linux Systems

Sa kadaghanan sa mga distribusyon sa Linux, ang direnv nga pakete magamit aron ma-install gikan sa mga default nga repository gamit ang imong manager sa package sa sistema sama sa gipakita.

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

Sa ubang mga distribusyon sama sa Red Hat Enterprise Linux (RHEL) ug CentOS o bisan unsang pag-apod-apod nga nagsuporta sa snapd nga na-install sa imong sistema.

$ sudo snap install direnv

Giunsa Pag-hook ang direv sa Imong Bash Shell

Human ma-install ang direnv, kinahanglan nimo nga i-hook kini sa imong karon nga kabhang sa Linux. Pananglitan sa Bash, idugang ang mosunod nga linya sa katapusan sa ~/.bashrc file.

Siguroha nga kini makita bisan human sa rvm, git-prompt, ug uban pang mga shell extension nga nagmaniobra sa prompt.

eval "$(direnv hook bash)"

Idugang ang mosunod nga linya sa katapusan sa ~/.zshrc file:

eval "$(direnv hook zsh)" 

Idugang ang mosunod nga linya sa katapusan sa ~/.config/fish/config.fish file:

eval (direnv hook fish)

Dayon isira ang aktibong terminal nga bintana ug ablihi ang bag-ong kabhang o tinubdan sa file sama sa gipakita.

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

Giunsa Paggamit ang direnv sa Linux Shell

Aron ipakita kung giunsa paglihok ang direnv, maghimo kami usa ka bag-ong direktoryo nga gitawag ug tecmint_projects ug ibalhin kini.

$ mkdir ~/tecmint_projects
$ cd tecmint_projects/

Sunod, maghimo kita ug bag-ong variable nga gitawag TEST_VARIABLE sa command line ug kung kini gipalanog, ang kantidad kinahanglan nga walay sulod:

$ echo $TEST_VARIABLE

Karon maghimo kita ug bag-ong .envrc file nga adunay Bash code nga ikarga ni direv. Gisulayan usab namo nga idugang ang linya nga \export ang TEST_VARIABLE=tecmint niini gamit ang echo command ug ang output redirection character (>):

$ echo export TEST_VARIABLE=tecmint > .envrc

Sa kasagaran, gibabagan sa mekanismo sa seguridad ang pagkarga sa .envrc file. Tungod kay nahibal-an namon nga kini usa ka luwas nga file, kinahanglan namon nga aprobahan ang sulud niini pinaagi sa pagpadagan sa mosunud nga mando:

$ direnv allow .

Karon nga ang sulod sa .envrc nga payl gitugotan na nga makarga, atong susihon ang bili sa TEST_VARIABLE nga atong gitakda kaniadto:

$ echo $TEST_VARIABLE

Kung mugawas kami sa tecmint_project nga direktoryo, ang direnv idiskarga ug kung among susihon ang kantidad sa TEST_VARIABLE sa makausa pa, kinahanglan nga walay sulod:

$ cd ..
$ echo $TEST_VARIABLE

Matag higayon nga mobalhin ka sa direktoryo sa tecmint_projects, ang .envrc nga payl ikarga sama sa gipakita sa mosunod nga screenshot:

$ cd tecmint_projects/

Para bawion ang pagtugot sa gihatag nga .envrc, gamita ang deny command.

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

Para sa dugang nga impormasyon ug instruksyon sa paggamit, tan-awa ang direnv man page:

$ man direnv

Dugang pa, ang direnv naggamit usab sa usa ka stdlib (direnv-stdlib) nga adunay daghang mga gimbuhaton nga nagtugot kanimo nga dali nga makadugang bag-ong mga direktoryo sa imong PATH ug daghan pa.

Aron makit-an ang dokumentasyon alang sa tanan nga magamit nga mga function, susiha ang direv-stdlib manual entry page:

$ man direnv-stdlib

Mao ra kana ang among naa kanimo! Kung aduna kay pangutana o hunahuna nga ipaambit kanamo, gamita ang feedback form sa ubos.