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