Direnv - Διαχείριση μεταβλητών περιβάλλοντος για συγκεκριμένο έργο στο Linux


Το direnv είναι μια εξαιρετική επέκταση ανοιχτού κώδικα για το κέλυφός σας σε λειτουργικό σύστημα UNIX όπως το Linux και το macOS. Μεταγλωττίζεται σε ένα μόνο στατικό εκτελέσιμο και υποστηρίζει κελύφη όπως bash, zsh, tcsh και fish.

Ο κύριος σκοπός του direnv είναι να επιτρέψει μεταβλητές περιβάλλοντος για συγκεκριμένο έργο χωρίς να γεμίζουν ~/.profile ή σχετικά αρχεία εκκίνησης φλοιού. Εφαρμόζει έναν νέο τρόπο φόρτωσης και εκφόρτωσης μεταβλητών περιβάλλοντος ανάλογα με τον τρέχοντα κατάλογο.

Χρησιμοποιείται για τη φόρτωση των εφαρμογών 12 παραγόντων (μια μεθοδολογία για τη δημιουργία εφαρμογών λογισμικού ως υπηρεσίας) μεταβλητών περιβάλλοντος, για τη δημιουργία περιβαλλόντων ανάπτυξης μεμονωμένων ανά έργο, καθώς και για τη φόρτωση μυστικών για ανάπτυξη. Επιπλέον, μπορεί να χρησιμοποιηθεί για τη δημιουργία λύσεων εγκατάστασης και διαχείρισης πολλών εκδόσεων παρόμοιες με τα 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, μπορείτε να το εγκαταστήσετε ως snap. Αυτό απαιτεί να έχετε εγκατεστημένο το snapd στο σύστημά σας.

sudo snap install direnv

Πώς να συνδέσετε το direnv στο Bash Shell σας

Μετά την εγκατάσταση του direnv, πρέπει να το συνδέσετε στο τρέχον κέλυφος του Linux. Για παράδειγμα για το Bash, προσθέστε την ακόλουθη γραμμή στο τέλος του αρχείου ~/.bashrc.

Βεβαιωθείτε ότι εμφανίζεται ακόμη και μετά από rvm, git-prompt και άλλες επεκτάσεις φλοιού που χειρίζονται το μήνυμα.

eval "$(direnv hook bash)"

Για το ZSH Shell

Προσθέστε την ακόλουθη γραμμή στο τέλος του αρχείου ~/.zshrc:

eval "$(direnv hook zsh)" 

Για το FISH Shell

Προσθέστε την ακόλουθη γραμμή στο τέλος του αρχείου ~/.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, χρησιμοποιήστε την εντολή άρνηση.

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

Για περισσότερες πληροφορίες και οδηγίες χρήσης, ανατρέξτε στη σελίδα χρήστη direnv:

man direnv

Επιπλέον, το direnv χρησιμοποιεί επίσης ένα stdlib (direnv-stdlib) διαθέτει πολλές λειτουργίες που σας επιτρέπουν να προσθέτετε εύκολα νέους καταλόγους στο σας PATHκαι κάντε πολλά ακόμα.

Για να βρείτε την τεκμηρίωση για όλες τις διαθέσιμες λειτουργίες, ελέγξτε τη σελίδα μη αυτόματης εισαγωγής direnv-stdlib:

man direnv-stdlib

Αυτό ήταν το μόνο που είχαμε για εσάς! Εάν έχετε οποιεσδήποτε ερωτήσεις ή σκέψεις να μοιραστείτε μαζί μας, χρησιμοποιήστε την παρακάτω φόρμα σχολίων.