Computer >> Máy Tính >  >> Lập trình >> Lập trình BASH

Direnv - Quản lý các biến môi trường dành riêng cho dự án trong Linux

direnv là một tiện ích mở rộng mã nguồn mở tiện lợi cho trình bao của bạn trên hệ điều hành UNIX như Linux và macOS. Nó được biên dịch thành một tệp thực thi tĩnh duy nhất và hỗ trợ các trình bao như bash , zsh , tcsh , và cá.

Mục đích chính của direnv là cho phép các biến môi trường dành riêng cho dự án mà không làm lộn xộn ~/.profile hoặc các tệp khởi động trình bao liên quan. Nó triển khai một cách mới để tải và dỡ các biến môi trường tùy thuộc vào thư mục hiện tại.

Nó được sử dụng để tải 12factor ứng dụng (một phương pháp luận để xây dựng các ứng dụng phần mềm như một dịch vụ), tạo môi trường phát triển biệt lập cho mỗi dự án và cũng tải các bí mật để triển khai. Ngoài ra, nó có thể được sử dụng để xây dựng các giải pháp quản lý và cài đặt nhiều phiên bản tương tự như rbenv , pyenv và phpenv .

Vậy direnv hoạt động như thế nào?

Trước khi trình bao tải một dấu nhắc lệnh, direnv kiểm tra sự tồn tại của .envrc tệp hiện tại (mà bạn có thể hiển thị bằng lệnh pwd) và thư mục mẹ. Quá trình kiểm tra diễn ra nhanh chóng và không thể nhận thấy trên từng lời nhắc.

Khi nó tìm thấy .envrc tệp với các quyền thích hợp, nó tải nó vào một trình bao phụ bash và nó nắm bắt tất cả các biến đã xuất và cung cấp chúng cho trình bao hiện tại.

Cài đặt direnv trong Hệ thống Linux

Trong hầu hết các bản phân phối Linux, direnv gói có sẵn để cài đặt từ kho lưu trữ mặc định bằng trình quản lý gói hệ thống của bạn như được hiển thị.

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

Trên các bản phân phối khác, chẳng hạn như Red Hat Enterprise Linux ( RHEL ) và CentOS hoặc bất kỳ bản phân phối nào hỗ trợ snap, bạn có thể cài đặt nó dưới dạng snap . Điều này yêu cầu bạn phải cài đặt snapd trên hệ thống của mình.

$ sudo snap install direnv

Cách kết nối direnv vào Bash Shell của bạn

Sau khi cài đặt direnv , bạn cần kết nối nó vào trình bao Linux hiện tại của mình. Ví dụ cho Bash , thêm dòng sau vào cuối ~/.bashrc tệp.

Đảm bảo rằng nó xuất hiện ngay cả sau rvm , git-prompt và các phần mở rộng shell khác thao tác với lời nhắc.

eval "$(direnv hook bash)"

Đối với ZSH Shell

Nối dòng sau vào cuối ~/.zshrc tệp:

eval "$(direnv hook zsh)" 

Đối với FISH Shell

Nối dòng sau vào cuối ~/.config/fish/config.fish tệp:

eval (direnv hook fish)

Sau đó, đóng cửa sổ đầu cuối đang hoạt động và mở một trình bao mới hoặc nguồn tệp như được hiển thị.

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

Cách sử dụng direnv trong Linux Shell

Để chứng minh cách direnv hoạt động, chúng tôi sẽ tạo một thư mục mới có tên là tecmint_projects và chuyển vào đó.

$ mkdir ~/tecmint_projects
$ cd tecmint_projects/

Tiếp theo, hãy tạo một biến mới có tên là TEST_VARIABLE trên dòng lệnh và khi nó được lặp lại, giá trị phải trống:

$ echo $TEST_VARIABLE

Bây giờ chúng ta sẽ tạo một .envrc mới tệp chứa mã Bash sẽ được tải bởi direnv . Chúng tôi cũng cố gắng thêm dòng “ xuất TEST_VARIABLE =tecmint ”Trong đó bằng cách sử dụng lệnh echo và ký tự chuyển hướng đầu ra (>) :

$ echo export TEST_VARIABLE=tecmint > .envrc

Theo mặc định, cơ chế bảo mật chặn tải .envrc tập tin. Vì chúng tôi biết đây là một tệp an toàn, chúng tôi cần phê duyệt nội dung của nó bằng cách chạy lệnh sau:

$ direnv allow .

Bây giờ nội dung của .envrc tệp đã được phép tải, hãy kiểm tra giá trị của TEST_VARIABLE mà chúng tôi đã đặt trước đó:

$ echo $TEST_VARIABLE

Khi chúng tôi thoát khỏi tecmint_project thư mục direnv sẽ được tải xuống và nếu chúng tôi kiểm tra giá trị của TEST_VARIABLE một lần nữa, nó sẽ trống:

$ cd ..
$ echo $TEST_VARIABLE
Direnv - Quản lý các biến môi trường dành riêng cho dự án trong Linux

Mỗi khi bạn chuyển sang tecmint_projects thư mục, .envrc tệp sẽ được tải như thể hiện trong ảnh chụp màn hình sau:

$ cd tecmint_projects/
Direnv - Quản lý các biến môi trường dành riêng cho dự án trong Linux

Để thu hồi ủy quyền của một .envrc đã cho , sử dụng từ chối lệnh.

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

Để biết thêm thông tin và hướng dẫn sử dụng, hãy xem direnv trang người đàn ông:

$ man direnv

Ngoài ra, direnv cũng sử dụng stdlib ( direnv-stdlib ) đi kèm với một số chức năng cho phép bạn dễ dàng thêm các thư mục mới vào PATH của mình và làm nhiều hơn thế nữa.

Để tìm tài liệu cho tất cả các chức năng có sẵn, hãy kiểm tra direnv-stdlib trang nhập thủ công:

$ man direnv-stdlib

Đó là tất cả những gì chúng tôi có cho bạn! Nếu bạn có bất kỳ câu hỏi hoặc suy nghĩ nào muốn chia sẻ với chúng tôi, hãy sử dụng biểu mẫu phản hồi bên dưới.