ค้นหาเว็บไซต์

Direnv - จัดการตัวแปรสภาพแวดล้อมเฉพาะโครงการใน Linux


direnv เป็นส่วนขยายโอเพ่นซอร์สที่ดีสำหรับเชลล์ของคุณบนระบบปฏิบัติการ UNIX เช่น Linux และ macOS มันถูกคอมไพล์เป็นไฟล์ปฏิบัติการแบบคงที่เดียวและรองรับเชลล์เช่น bash, zsh, tcsh และ fish

วัตถุประสงค์หลักของ direnv คือการอนุญาตให้ใช้ตัวแปรสภาพแวดล้อมเฉพาะโปรเจ็กต์โดยไม่ทำให้ ~/.profile หรือไฟล์เริ่มต้นเชลล์ที่เกี่ยวข้องยุ่งเหยิง ใช้วิธีใหม่ในการโหลดและยกเลิกการโหลดตัวแปรสภาพแวดล้อมโดยขึ้นอยู่กับไดเร็กทอรีปัจจุบัน

ใช้เพื่อโหลดตัวแปรสภาพแวดล้อมของแอป 12factor (วิธีการสำหรับการสร้างแอปซอฟต์แวร์ตามบริการ) สร้างสภาพแวดล้อมการพัฒนาที่แยกออกจากกันในแต่ละโปรเจ็กต์ และยังโหลดความลับสำหรับการนำไปใช้งานด้วย นอกจากนี้ยังสามารถใช้เพื่อสร้างโซลูชันการติดตั้งและการจัดการหลายเวอร์ชันที่คล้ายกับ rbenv, pyenv และ phpenv

direnv ทำงานอย่างไร?

ก่อนที่เชลล์จะโหลดพรอมต์คำสั่ง direnv จะตรวจสอบการมีอยู่ของไฟล์ .envrc ในปัจจุบัน (ซึ่งคุณสามารถแสดงได้โดยใช้คำสั่ง pwd) และไดเรกทอรีหลัก กระบวนการตรวจสอบรวดเร็วและไม่สามารถสังเกตเห็นได้ในแต่ละข้อความแจ้ง

เมื่อพบไฟล์ .envrc ที่มีสิทธิ์ที่เหมาะสม ไฟล์จะโหลดลงในเชลล์ย่อย bash และจับตัวแปรที่ส่งออกทั้งหมด และทำให้พร้อมใช้งานสำหรับเชลล์ปัจจุบัน

การติดตั้ง direnv ในระบบ Linux

ใน Linux ส่วนใหญ่ แพ็คเกจ direnv พร้อมให้ติดตั้งจากที่เก็บข้อมูลเริ่มต้นโดยใช้ตัวจัดการแพ็คเกจระบบของคุณดังที่แสดง

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

ในการกระจายอื่นๆ เช่น Red Hat Enterprise Linux (RHEL) และ CentOS หรือการกระจายใดๆ ที่รองรับ snaps คุณสามารถติดตั้งเป็น สแน็ป สิ่งนี้ต้องการให้คุณติดตั้ง snapd บนระบบของคุณ

sudo snap install direnv

วิธีเชื่อมต่อ direnv เข้ากับ Bash Shell ของคุณ

หลังจากติดตั้ง direnv คุณจะต้องเชื่อมต่อมันเข้ากับเชลล์ Linux ปัจจุบันของคุณ ตัวอย่างเช่น สำหรับ Bash ให้เพิ่มบรรทัดต่อไปนี้ที่ส่วนท้ายของไฟล์ ~/.bashrc

ตรวจสอบให้แน่ใจว่าปรากฏหลังจาก rvm, git-prompt และส่วนขยายเชลล์อื่นๆ ที่จัดการพรอมต์

eval "$(direnv hook bash)"

สำหรับเชลล์ ZSH

เพิ่มบรรทัดต่อไปนี้ต่อท้ายไฟล์ ~/.zshrc:

eval "$(direnv hook zsh)" 

สำหรับเปลือกปลา

เพิ่มบรรทัดต่อไปนี้ต่อท้ายไฟล์ ~/.config/fish/config.fish:

eval (direnv hook fish)

จากนั้นปิดหน้าต่างเทอร์มินัลที่ใช้งานอยู่และเปิดเชลล์ใหม่หรือซอร์สไฟล์ตามที่แสดง

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

วิธีใช้ direnv ใน Linux Shell

เพื่อสาธิตวิธีการทำงานของ direnv เราจะสร้างไดเร็กทอรีใหม่ชื่อ tecmint_projects และย้ายเข้าไปที่ไดเร็กทอรีนั้น

mkdir ~/tecmint_projects
cd tecmint_projects/

ต่อไป เรามาสร้างตัวแปรใหม่ชื่อ TEST_VARIABLE บนบรรทัดคำสั่ง และเมื่อมีการสะท้อนกลับ ค่าควรว่างเปล่า:

echo $TEST_VARIABLE

ตอนนี้เราจะสร้างไฟล์ .envrc ใหม่ที่มีโค้ด Bash ที่จะโหลดโดย direnv นอกจากนี้เรายังพยายามเพิ่มบรรทัด “ส่งออก TEST_VARIABLE=tecmint ” ลงไปโดยใช้คำสั่ง echo และอักขระการเปลี่ยนเส้นทางเอาต์พุต (>):

echo export TEST_VARIABLE=tecmint > .envrc

ตามค่าเริ่มต้น กลไกการรักษาความปลอดภัยจะบล็อกการโหลดไฟล์ .envrc เนื่องจากเรารู้ว่ามันเป็นไฟล์ที่ปลอดภัย เราจึงต้องอนุมัติเนื้อหาโดยใช้คำสั่งต่อไปนี้:

direnv allow .

ตอนนี้เนื้อหาของไฟล์ .envrc ได้รับอนุญาตให้โหลดแล้ว เรามาตรวจสอบค่าของ TEST_VARIABLE ที่เราตั้งไว้ก่อนหน้านี้กันดีกว่า:

echo $TEST_VARIABLE

เมื่อเราออกจากไดเร็กทอรี tecmint_project direnv จะถูกยกเลิกการโหลด และหากเราตรวจสอบค่าของ TEST_VARIABLE อีกครั้ง ก็ควรจะว่างเปล่า:

cd ..
echo $TEST_VARIABLE

ทุกครั้งที่คุณย้ายไปยังไดเรกทอรี tecmint_projects ไฟล์ .envrc จะถูกโหลดดังที่แสดงในภาพหน้าจอต่อไปนี้:

cd tecmint_projects/

หากต้องการเพิกถอนการให้สิทธิ์ .envrc ที่กำหนด ให้ใช้คำสั่ง deny

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

สำหรับข้อมูลเพิ่มเติมและคำแนะนำการใช้งาน โปรดดูหน้าคู่มือ direnv:

man direnv

นอกจากนี้ direnv ยังใช้ stdlib (direnv-stdlib) ที่มาพร้อมกับฟังก์ชันต่างๆ ที่ช่วยให้คุณสามารถเพิ่มไดเร็กทอรีใหม่ลงใน ของคุณได้อย่างง่ายดาย เส้นทาง และทำสิ่งอื่นๆ อีกมากมาย

หากต้องการค้นหาเอกสารประกอบสำหรับฟังก์ชันทั้งหมดที่มี ให้ตรวจสอบหน้าการป้อนข้อมูลด้วยตนเอง direnv-stdlib:

man direnv-stdlib

นั่นคือทั้งหมดที่เรามีเพื่อคุณ! หากคุณมีคำถามหรือความคิดที่จะแบ่งปันกับเรา โปรดใช้แบบฟอร์มคำติชมด้านล่าง