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
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/
Để 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.