Μεταβλητές περιβάλλοντος στο Linux. Μεταβλητή περιβάλλοντος PATH Πώς να προσθέσετε πρόγραμμα στο μονοπάτι linux

Τι είναι? Πολλές από τις εντολές που εισάγετε στη γραμμή εντολών απαιτούν τη χρήση ενός εξωτερικού προγράμματος που έχει φορτωθεί από το σύστημα αρχείων. Για παράδειγμα, εντολές όπως mkdir και wc βρίσκονται στην πραγματικότητα στον φάκελο /bin.

Όταν εισάγετε μια δήλωση που το κέλυφος Bash δεν αναγνωρίζει, προσπαθεί να την εκτελέσει ως πρόγραμμα και επιστρέφει ένα σφάλμα εάν δεν βρει ένα πρόγραμμα με αυτό το όνομα. Και αυτό δεν ισχύει μόνο για τις βασικές εντολές που εξετάσαμε, γιατί από γραμμή εντολώνμπορείτε να εκτελέσετε οποιοδήποτε πρόγραμμα.


Πώς όμως γνωρίζει το Linux ποια προγράμματα να τρέξει από ποιους καταλόγους, δεδομένης της παρουσίας στο σύστημα αρχείων; Το λειτουργικό σύστημα χρησιμοποιεί τη μεταβλητή περιβάλλοντος συστήματος για να καθορίσει ένα υποσύνολο φακέλων προς αναζήτηση όταν λαμβάνει μια άγνωστη εντολή. Αυτή η μεταβλητή ονομάζεται PATH και μπορεί να εμφανιστεί με την ακόλουθη εντολή echo (απαιτείται το σύμβολο $):

ηχώ $PATH

Η έξοδος αυτής της εντολής θα μοιάζει με τις ακόλουθες επτά απόλυτες διαδρομές φακέλων, χωρισμένες με άνω και κάτω τελείες:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games

Κάθε φορά που εισάγετε μια άγνωστη εντολή, το Linux θα κοιτάζει μέσα από κάθε έναν από τους φακέλους που καθορίζονται στη μεταβλητή περιβάλλοντος, με τη σειρά που καθορίστηκαν, αναζητώντας ένα πρόγραμμα με το ίδιο όνομα. Εάν βρεθεί το πρόγραμμα, εκκινείται. Διαφορετικά, εμφανίζεται ένα μήνυμα σφάλματος. Αλλά δεν θα είναι λάθος αν αγοράσετε τα αγαπημένα σας ασημένια δαχτυλίδια ως δώρο. Το ασήμι θα στολίσει κάθε γυναίκα!

Αυτοί οι επτά φάκελοι παρέχουν εύκολη πρόσβαση σε όλα τα κύρια προγράμματα του λειτουργικού συστήματος, συμπεριλαμβανομένων των . Οποιαδήποτε προγράμματα εκτός αυτών των επτά φακέλων δεν μπορούν να εκκινηθούν πληκτρολογώντας απλώς το όνομά τους στη γραμμή εντολών.

Για παράδειγμα, πραγματοποιήσατε λήψη του βοηθητικού προγράμματος ημερολογίου από το Διαδίκτυο στον οικιακό σας φάκελο. Εάν εισαγάγετε το όνομά του στη γραμμή εντολών, θα λάβετε ένα σφάλμα επειδή βρίσκεται σε έναν φάκελο που δεν περιλαμβάνεται στη διαδρομή συστήματος. Για να εκτελέσετε αυτό το πρόγραμμα, εισαγάγετε την ακόλουθη γραμμή (θυμηθείτε ότι το σύμβολο ~ είναι συντομογραφία για τον αρχικό σας φάκελο):

Εάν το αποθηκεύσατε σε έναν φάκελο εκτός της καθορισμένης διαδρομής σας, θα χρειαστεί να εισαγάγετε την απόλυτη διαδρομή και το όνομα αρχείου για να εκτελέσετε το βοηθητικό πρόγραμμα.

Φυσικά, το ημερολόγιο θεωρείται ότι είναι ένα απλό αυτόνομο πρόγραμμα που δεν απαιτεί εγκατάσταση, επειδή οι περισσότερες μεγάλες εφαρμογές θα τοποθετήσουν το εκτελέσιμο αρχείο του προγράμματος κάπου στην καθορισμένη διαδρομή σας κατά τη διαδικασία εγκατάστασης. Σαν αυτό Μεταβλητή περιβάλλοντος PATH, να χαίρεσαι την υγεία σου!

Μεταβλητές περιβάλλοντος ( μεταβλητή περιβάλλοντος) χρησιμοποιούνται για την αποθήκευση κοινών τιμών μεταβλητών σε σενάρια και προγράμματα. Τέτοιες μεταβλητές μπορούν να οριστούν για μια χρονική περίοδο, για παράδειγμα, για την περίοδο λειτουργίας ενός συγκεκριμένου κελύφους τερματικού ή για την περίοδο μιας περιόδου λειτουργίας χρήστη ή μπορείτε να ορίσετε μια μεταβλητή περιβάλλοντος σε παγκόσμιο επίπεδο - για ολόκληρο το σύστημα .

Μεταβλητές περιβάλλοντος

$HOME
Η μεταβλητή περιέχει τη διαδρομή προς τον αρχικό κατάλογο του τρέχοντος χρήστη. $USER
Τρέχον όνομα χρήστη $PATH
Λίστα καταλόγων για το κέλυφος για αναζήτηση εκτελέσιμων προγραμμάτων. $PWD
Η διαδρομή προς τον τρέχοντα κατάλογο εργασίας (ή pwd). Παράδειγμα: dir_path=$(pwd) . $SHELL
Προεπιλεγμένος διερμηνέας $RANDOM
Δημιουργεί έναν τυχαίο αριθμό 0..32767 κάθε φορά που γίνεται πρόσβαση στη μεταβλητή. $ΔΕΥΤΕΡΟΛΕΠΤΑ
Χρόνος σε δευτερόλεπτα. από την αρχή του κελύφους. $; Το αποτέλεσμα της προηγούμενης εντολής. $HOSTNAME
Όνομα υπολογιστή $HISTFILE
Διαδρομή προς το αρχείο ιστορικού διερμηνέα $IFS
Λίστα διαχωριστικών χαρακτήρων για εντολές, παραμέτρους, στοιχεία πίνακα (προεπιλογή: διάστημα, καρτέλα, νέα γραμμή) $PS1
Πρότυπο συμβολοσειράς προτροπής διερμηνέα.

Προσωρινή ρύθμιση μεταβλητής περιβάλλοντος

Ορισμός μεταβλητής περιβάλλοντος για την περίοδο συνεδρίας:

# Για μια νέα διεργασία env varname=value [εντολή] # Για το τρέχον κέλυφος και όλες τις υποδιεργασίες εξαγωγή varname=value [εντολή]

Η τιμή της μεταβλητής διατηρείται μέχρι να γίνει επανεκκίνηση του συστήματος.

Ορισμός σταθερής τιμής

Οι μεταβλητές περιβάλλοντος σε επίπεδο συστήματος ορίζονται μέσω του αρχείου /etc/environment:

ENVIRONMENT="dev"

Ορισμός μεταβλητής περιβάλλοντος για συγκεκριμένο χρήστη μέσω ~/.bashrc ή ~/.bash_profile:

PATH="$(PATH):/home/user/bin:"

Προσοχή!

Το αρχείο ~/.bash_profile θα εκτελεστεί όταν ο διερμηνέας ξεκινήσει με την επιλογή -l. Όταν συνδεθείτε τοπικά, αυτό το αρχείο δεν είναι αναγνώσιμο!

Πρέπει επίσης να θυμάστε ότι οι αλλαγές θα τεθούν σε ισχύ μόνο μετά την επανεκκίνηση της συνεδρίας!

Προβολή της τιμής μιας μεταβλητής περιβάλλοντος

Για να προβάλετε την τιμή μιας μεταβλητής περιβάλλοντος, χρησιμοποιήστε την εντολή printenv:

Printenv<имя_переменной>

#κέλυφος, #bash, #περιβάλλον

Το AIR SDK περιέχει πολλά προγράμματα που μπορείτε να εκτελέσετε από τη γραμμή εντολών ή από ένα παράθυρο τερματικού. Η εκτέλεση αυτών των προγραμμάτων είναι πολύ πιο βολική εάν ορίσετε τη διαδρομή προς τον κατάλογο bin του SDK χρησιμοποιώντας τη μεταβλητή περιβάλλοντος Path.

Αυτή η ενότητα παρέχει μια γενική περιγραφή της διαδικασίας για τον ορισμό της διαδρομής σε Windows, Mac και Linux. Ωστόσο, οι διαμορφώσεις του υπολογιστή μπορεί να διαφέρουν πολύ, επομένως αυτή η διαδικασία ενδέχεται να μην λειτουργεί σε όλα τα συστήματα. Σε αυτήν την περίπτωση, οι πληροφορίες που χρειάζεστε βρίσκονται στην τεκμηρίωση του λειτουργικού συστήματος ή στο Διαδίκτυο.

Ρύθμιση της μεταβλητής περιβάλλοντος PATH σε Linux και Mac OS χρησιμοποιώντας το κέλυφος Bash

Όταν μια εντολή εισάγεται σε ένα παράθυρο τερματικού, το κέλυφος (το πρόγραμμα που διαβάζει τις εντολές που εισάγονται και προσπαθεί να ανταποκριθεί κατάλληλα) πρέπει πρώτα να βρει το πρόγραμμα της εντολής στο σύστημα αρχείων. Το κέλυφος αναζητά εντολές σε μια λίστα καταλόγων, η οποία αποθηκεύεται σε μια μεταβλητή περιβάλλοντος που ονομάζεται $PATH. Για να προβάλετε την τρέχουσα τιμή της μεταβλητής διαδρομής, πληκτρολογήστε την ακόλουθη εντολή:

ηχώ $PATH

Θα εμφανιστεί μια λίστα καταλόγων διαχωρισμένη με άνω και κάτω τελεία, κάπως έτσι:

/usr/bin:/bin:/usr/sbin:/usr/local/bin:/usr/x11/bin

Η διαδρομή προς τον κατάλογο AIR SDK bin πρέπει να προστεθεί σε αυτήν τη λίστα, ώστε το κέλυφος να μπορεί να βρει τα εργαλεία ADT και ADT. Ας υποθέσουμε ότι το AIR SDK βρίσκεται στον κατάλογο /Users/fred/SDKs/AIR. Σε αυτήν την περίπτωση, η ακόλουθη εντολή χρησιμοποιείται για την προσθήκη των απαιτούμενων καταλόγων στη μεταβλητή περιβάλλοντος διαδρομής:

Εξαγωγή PATH=$PATH:/Users/fred/SDKs/AIR/bin:/Users/fred/SDKs/android/tools

Σημείωση. Εάν η διαδρομή περιέχει χαρακτήρες κενού διαστήματος, πρέπει να προηγείται ένας χαρακτήρας ανάστροφης κάθετου, όπως φαίνεται παρακάτω:

/Users/fred\ jones/SDKs/AIR\ 2.5\ SDKs/bin

Για να ελέγξετε τα αποτελέσματα της προσθήκης, μπορείτε να εκτελέσετε ξανά την εντολή echo:

Echo $PATH /usr/bin:/bin:/usr/sbin:/usr/local/bin:/usr/x11/bin:/Users/fred/SDKs/AIR/bin:/Users/fred/SDKs/android/ εργαλεία

Οι κατάλογοι προστέθηκαν με επιτυχία. Τώρα μπορείτε να καλέσετε τις παρακάτω εντολές και να λάβετε τη σωστή απάντηση:

Adt-έκδοση

Εάν η μεταβλητή περιβάλλοντος $PATH άλλαξε σωστά, η εντολή θα πρέπει να εξάγει την έκδοση περιβάλλοντος ADT.

Ωστόσο, υπάρχει ένα πρόβλημα: όταν ανοίγετε ένα νέο παράθυρο τερματικού, θα παρατηρήσετε ότι η μεταβλητή διαδρομής δεν περιέχει πλέον τα νέα στοιχεία που είχαν προστεθεί προηγουμένως σε αυτήν. Η εντολή ρύθμισης διαδρομής πρέπει να εκτελείται κάθε φορά που ξεκινάτε ένα νέο τερματικό.

Μια κοινή λύση σε αυτό το πρόβλημα θα ήταν η προσθήκη της εντολής σε ένα από τα σενάρια εκκίνησης που χρησιμοποιεί το κέλυφος. Σε Mac OS, μπορείτε να δημιουργήσετε ένα αρχείο .bash_profile στον κατάλογο ~/username που θα εκτελείται κάθε φορά που ανοίγετε ένα νέο παράθυρο τερματικού. Στο Ubuntu, το σενάριο που εκτελείται όταν ανοίγει ένα νέο παράθυρο τερματικού είναι .bashrc. Σε άλλα Διανομές Linuxκαι κοχύλια, ισχύουν παρόμοιοι κανόνες.

Διαδικασία για την προσθήκη μιας εντολής σε ένα σενάριο εκκίνησης του κελύφους

    Αλλάξτε τον αρχικό σας κατάλογο:

    Δημιουργήστε ένα προφίλ διαμόρφωσης κελύφους (εάν είναι απαραίτητο) και ανακατευθύνετε το κείμενο εισαγωγής στο τέλος του αρχείου χρησιμοποιώντας την εντολή cat >>. Χρησιμοποιήστε το κατάλληλο αρχείο για εσάς λειτουργικό σύστημακαι κοχύλια. Για παράδειγμα, μπορείτε να χρησιμοποιήσετε το .bash_profile σε Mac OS και το .bashrc στο Ubuntu.

    Γάτα >> .bash_profile

    Εισαγάγετε το κείμενο που θέλετε να προσθέσετε στο αρχείο:

    Εξαγωγή PATH=$PATH:/Users/cward/SDKs/android/tools:/Users/cward/SDKs/AIR/bin

    Τερματίστε την ανακατεύθυνση κειμένου πατώντας τα πλήκτρα CTRL-SHIFT-D στο πληκτρολόγιό σας.

    Εμφανίστε το αρχείο για να βεβαιωθείτε ότι η λειτουργία εκτελέστηκε σωστά:

    Cat .bash_profile

    Ανοίξτε ένα νέο παράθυρο τερματικού για να ελέγξετε τη διαδρομή:

    ηχώ $PATH

    Τα στοιχεία που προστέθηκαν θα πρέπει να εμφανίζονται στην οθόνη.

Αν δημιουργηθεί αργότερα μια νέα έκδοσηένα από τα SDK που πρόκειται να τοποθετηθεί σε διαφορετικό κατάλογο, η εντολή ρύθμισης διαδρομής στο αρχείο διαμόρφωσης θα πρέπει να ενημερωθεί ανάλογα. Διαφορετικά, το κέλυφος θα συνεχίσει να χρησιμοποιεί την παλιά έκδοση.

Ρύθμιση της μεταβλητής περιβάλλοντος PATH στα Windows

Όταν ανοίγει ένα παράθυρο εντολών στα Windows, κληρονομεί τις καθολικές μεταβλητές περιβάλλοντος που ορίζονται στις ιδιότητες του συστήματος. Μια σημαντική μεταβλητή είναι η μεταβλητή διαδρομή, η οποία περιέχει μια λίστα καταλόγων στους οποίους μπορείτε να αναζητήσετε το πρόγραμμα που έχετε εισαγάγει. Για να προβάλετε την τρέχουσα λίστα καταλόγων στη μεταβλητή διαδρομής, μπορείτε να πληκτρολογήσετε την ακόλουθη εντολή στο παράθυρο εντολών:

ορίστε μονοπάτι

Αυτό θα παράγει μια λίστα καταλόγων διαχωρισμένη με άνω και κάτω τελεία που μοιάζει κάπως έτσι:

Διαδρομή=C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem

Η διαδρομή προς τον κατάλογο AIR SDK bin πρέπει να προστεθεί σε αυτήν τη λίστα, ώστε το πρόγραμμα εντολών να μπορεί να βρει τα εργαλεία ADT και ADT. Ας υποθέσουμε ότι το AIR SDK βρίσκεται στον κατάλογο C:\SDKs\AIR. Σε αυτήν την περίπτωση, η διαδρομή μπορεί να προστεθεί ως εξής:

    Στην ενότητα Πίνακας Ελέγχου, ανοίξτε το πλαίσιο διαλόγου Ιδιότητες συστήματος ή κάντε δεξί κλικ στο εικονίδιο Ο Υπολογιστής μου και επιλέξτε Ιδιότητες από το μενού.

    Στην καρτέλα Για προχωρημένους, κάντε κλικ στο κουμπί Μεταβλητές περιβάλλοντος.

    Στην ενότητα System Variables του παραθύρου διαλόγου Environment Variables, επιλέξτε το στοιχείο Path.

    Κάντε κλικ στο κουμπί Αλλαγή.

    Μετακινηθείτε στο τέλος της γραμμής στο πεδίο Μεταβλητή τιμή.

    Στο τέλος της τρέχουσας τιμής, πληκτρολογήστε το ακόλουθο κείμενο:

    ;C:\SDKs\AIR\bin

    Πατήστε το κουμπί "OK" σε όλα παράθυρα διαλόγουγια να σώσει το μονοπάτι.

Εάν υπάρχουν ανοιχτά παράθυρα εντολών σε αυτό το σημείο, οι αλλαγές σε αυτά δεν θα εφαρμοστούν. Ανοίξτε ένα νέο παράθυρο εντολών και πληκτρολογήστε την ακόλουθη εντολή για να βεβαιωθείτε ότι η μεταβλητή περιβάλλοντος έχει ρυθμιστεί σωστά:

Adt-έκδοση

Εάν η θέση του AIR SDK αλλάξει αργότερα ή προστεθεί νέα έκδοση, η μεταβλητή περιβάλλοντος διαδρομής θα πρέπει να αλλάξει ανάλογα.

Αναρωτιέμαι πού πρέπει να προστεθεί η νέα διαδρομή στη μεταβλητή περιβάλλοντος PATH. Γνωρίζω ότι αυτό μπορεί να γίνει με επεξεργασία του .bashrc (για παράδειγμα), αλλά δεν είναι ξεκάθαρο πώς.

Ετσι:

Εξαγωγή PATH=~/opt/bin:$PATH

Εξαγωγή PATH=$PATH:~/opt/bin

11 απαντήσεις

απλό υλικό

PATH=$PATH:~/opt/bin PATH=~/opt/bin:$PATH

ανάλογα με το αν θέλετε να προσθέσετε ~/opt/bin στο τέλος (για αναζήτηση σε όλους τους άλλους καταλόγους εάν υπάρχει πρόγραμμα με το ίδιο όνομα σε πολλούς καταλόγους) ή στην αρχή (για αναζήτηση πριν από όλους τους άλλους καταλόγους).

Μπορείτε να προσθέσετε πολλές καταχωρήσεις ταυτόχρονα. PATH=$PATH:~/opt/bin:~/opt/node/bin ή αλλαγές στην ταξινόμηση μια χαρά.

Δεν χρειάζεται να κάνετε εξαγωγή εάν η μεταβλητή βρίσκεται ήδη στο περιβάλλον: οποιαδήποτε αλλαγή στην τιμή της μεταβλητής αντικατοπτρίζεται στο περιβάλλον.¹ Το PATH βρίσκεται σχεδόν πάντα στο περιβάλλον. Ολα συστήματα unixεγκαταστήστε το πολύ νωρίς (συνήθως στην πρώτη κιόλας διαδικασία, μάλιστα).

Εάν το PATH σας δημιουργείται από πολλά διαφορετικά στοιχεία, μπορεί να καταλήξετε με διπλότυπες καταχωρίσεις. Δείτε Πώς να προσθέσετε μια διαδρομή οικιακού καταλόγου που θα ανακαλυφθεί από το Unix, ποια εντολή; και Αφαιρέστε τις διπλότυπες καταχωρήσεις $PATH με την εντολή awk για να αποφύγετε την αντιγραφή ή να τις αφαιρέσετε.

Πού να βάλετε

Σημειώστε ότι το ~/.bash_rc δεν είναι αναγνώσιμο από κανένα πρόγραμμα και το ~/.bashrc είναι ένα αρχείο διαμόρφωσης για διαδραστικές παρουσίες bash. Δεν πρέπει να ορίσετε μεταβλητές περιβάλλοντος στο ~/.bashrc. Το σωστό μέρος για να ορίσετε μεταβλητές περιβάλλοντος όπως το PATH είναι το ~/.profile (ή το ~/.bash_profile αν δεν σας αρέσουν τα κελύφη εκτός από το bash). Δείτε Ποια είναι η διαφορά μεταξύ τους και ποια πρέπει να χρησιμοποιήσω;

Σημειώσεις για τα κοχύλια που δεν είναι bash

Στα bash, ksh και zsh, η εξαγωγή είναι μια ειδική σύνταξη και τόσο το PATH=~/opt/bin:$PATH όσο και το export PATH=~/opt/bin:$PATH κάνουν το σωστό. Σε άλλα κελύφη Bourne/POSIX, όπως η παύλα (που είναι /bin/sh σε πολλά συστήματα), η εξαγωγή αναλύεται ως κανονική εντολή, πράγμα που συνεπάγεται δύο διαφορές:

  • Το ~ αναλύεται μόνο στην αρχή μιας λέξης, εκτός από τις αναθέσεις (δείτε Πώς μπορώ να προσθέσω μια διαδρομή σε έναν οικιακό κατάλογο που θα ανακαλυφθεί από το Unix που απαιτεί εντολή; ;
  • Τα εξωτερικά διπλά εισαγωγικά $PATH διακόπτονται εάν το PATH περιέχει κενά ή \[*? .

Έτσι, σε κελύφη όπως η παύλα, η εξαγωγή PATH=~/opt/bin:$PATH ορίζει το PATH στην κυριολεκτική συμβολοσειρά ~/opt/bin/: ακολουθούμενη από την τιμή του PATH μέχρι την πρώτη θέση. Το PATH=~/opt/bin:$PATH (απλή ανάθεση) δεν απαιτεί εισαγωγικά και κάνει το σωστό. Εάν θέλετε να χρησιμοποιήσετε την εξαγωγή σε φορητό σενάριο, πρέπει να γράψετε export PATH="$HOME/opt/bin:$PATH" ή PATH=~/opt/bin:$PATH εξαγωγή PATH (ή PATH=$HOME/opt /bin: $PATH εξαγωγή PATH για φορητότητα ακόμη και στο κέλυφος Bourne, το οποίο δεν δέχεται εξαγωγή var=value και δεν έκανε επέκταση tilde).

¹ Αυτό δεν ίσχυε στα κοχύλια Bourne (όπως το πραγματικό κέλυφος Bourne, όχι τα σύγχρονα κοχύλια τύπου POSIX), αλλά δεν είναι πιθανό να συναντήσετε αυτά τα παλιά κοχύλια αυτές τις μέρες. Υπο>

Είτε έτσι είτε αλλιώς λειτουργεί, αλλά δεν κάνουν το ίδιο: τα στοιχεία PATH ελέγχονται από αριστερά προς τα δεξιά. Στο πρώτο παράδειγμα εκτελέσιμα αρχείαστο ~/opt/bin θα έχει προτεραιότητα έναντι εκείνων που ορίζονται στο /usr/bin για παράδειγμα, που μπορεί να είναι αυτό που θέλετε ή να μην είναι αυτό που θέλετε.

Συγκεκριμένα, είναι επικίνδυνο από άποψη ασφαλείας να προσθέτετε μονοπάτια στο μπροστινό μέρος, επειδή εάν κάποιος μπορεί να αποκτήσει πρόσβαση εγγραφής στο ~/opt/bin , μπορεί να βάλει ένα άλλο ls για παράδειγμα, το οποίο πιθανότατα θα χρησιμοποιήσετε αντί για το /bin /ls χωρίς να το παρατηρήσετε. Τώρα φανταστείτε να κάνετε το ίδιο για το ssh ή το πρόγραμμα περιήγησής σας ή την επιλογή σας... (Τρεις φορές βάλτε το ίδιο στη διαδρομή σας.)

Είμαι μπερδεμένος με την ερώτηση 2 (καθώς έχει αφαιρεθεί από την ερώτηση, καθώς αφορούσε ένα άσχετο θέμα):

Τι αποτελεσματική μέθοδοςπροσθήκη επιπλέον μονοπατιών σε διαφορετικές γραμμές; Αρχικά σκέφτηκα ότι αυτό μπορεί να κάνει το κόλπο:

εξαγωγή PATH=$PATH:~/opt/bin εξαγωγή PATH=$PATH:~/opt/node/bin

Αλλά αυτό δεν συμβαίνει επειδή η δεύτερη εκχώρηση όχι μόνο προσθέτει ~/opt/node/bin, αλλά και την προηγουμένως εκχωρημένη PATH.

Αυτή είναι μια πιθανή λύση:

Εξαγωγή PATH=$PATH:~/opt/bin:~/opt/node/bin

Αλλά για αναγνωσιμότητα, θα προτιμούσα να έχω έναν προορισμό ανά διαδρομή.

Αν λέτε

PATH=~/opt/bin

Αυτό όλα, που θα είναι στο PATH σας. Το PATH είναι απλώς μια μεταβλητή περιβάλλοντος και αν θέλετε να προσθέσετε στο PATH θα πρέπει να δημιουργήσετε ξανά τη μεταβλητή με ακριβώς το περιεχόμενο που θέλετε. Δηλαδή αυτό που δίνεις ως παράδειγμα στην ερώτηση 2 είναι ακριβώς αυτό που θέλεις να κάνεις, αν δεν έχω χάσει τελείως το νόημα της ερώτησης.

Χρησιμοποιώ και τις δύο φόρμες στον κώδικά μου. Έχω ένα γενικό προφίλ που εγκαθιστώ σε κάθε μηχάνημα στο οποίο εργάζομαι και μοιάζει με αυτό για να φιλοξενεί πιθανούς καταλόγους που λείπουν:

Εξαγωγή PATH=/opt/bin:/usr/local/bin:/usr/contrib/bin:/bin:/usr/bin:/usr/sbin:/usr/bin/X11 # προσθήκη προαιρετικών στοιχείων στη διαδρομή για bindir σε $HOME/local/bin $HOME/bin; κάνω εάν [ -d $bindir ]; τότε PATH=$PATH:$(bindir) ολοκληρώθηκε

Το Linux ορίζει μια εκτελέσιμη διαδρομή αναζήτησης με τη μεταβλητή περιβάλλοντος $PATH. Για να προσθέσετε τον κατάλογο /data/myscripts στην αρχή της μεταβλητής περιβάλλοντος $PATH, χρησιμοποιήστε τα εξής:

PATH=/data/myscripts:$PATH

Για να προσθέσετε αυτόν τον κατάλογο στο τέλος της διαδρομής, χρησιμοποιήστε την ακόλουθη εντολή:

PATH=$PATH:/data/myscripts

Αλλά τα προηγούμενα δεν είναι αρκετά, γιατί όταν ορίζετε μια μεταβλητή περιβάλλοντος μέσα σε ένα σενάριο, αυτή η αλλαγή ισχύει μόνο μέσα στο σενάριο. Αυτός ο περιορισμός περιορίζεται με δύο τρόπους:

  • Εάν εξάγετε μια μεταβλητή περιβάλλοντος μέσα σε ένα σενάριο, είναι αποτελεσματική σε οποιοδήποτε πρόγραμμα που καλείται από το σενάριο. Σημειώστε ότι αυτό δεν είναι αποτελεσματικό στο πρόγραμμα που κάλεσε το σενάριο.
  • Εάν το πρόγραμμα που καλεί τη δέσμη ενεργειών το κάνει συμπεριλαμβάνοντας αντί να καλεί, οποιεσδήποτε αλλαγές περιβάλλοντος στη δέσμη ενεργειών είναι αποτελεσματικές στο πρόγραμμα κλήσης. Αυτή η συμπερίληψη μπορεί να γίνει με την εντολή dot ή την εντολή source.

$HOME/myscript.sh πηγή $HOME/myscript.sh

Η συμπερίληψη περιλαμβάνει βασικά το σενάριο "επίκλησης" στο σενάριο "επίκλησης". Αυτό είναι παρόμοιο με το #include στο C. Επομένως, είναι αποτελεσματικό μέσα σε ένα σενάριο ή ένα πρόγραμμα κλήσης. Αλλά φυσικά αυτό δεν είναι αποτελεσματικό για προγράμματα ή σενάρια που καλούνται από το καλούν πρόγραμμα. Για να το κάνετε αποτελεσματικό μέχρι την αλυσίδα κλήσεων, πρέπει να ακολουθήσετε τη ρύθμιση της μεταβλητής περιβάλλοντος με την εντολή εξαγωγής.

Για παράδειγμα, το πρόγραμμα κελύφους bash περιλαμβάνει τα περιεχόμενα του αρχείου .bash_profile κατά τη συμπερίληψη. Βάλτε λοιπόν τις ακόλουθες 2 γραμμές στο .bash_profile:

PATH=$PATH:/data/myscripts εξαγωγή PATH

βάζει αποτελεσματικά αυτές τις 2 γραμμές κώδικα σε ένα πρόγραμμα bash. Έτσι, σε μεταβλητή bashΤο $PATH περιλαμβάνει το $HOME/myscript.sh και λόγω της δήλωσης εξαγωγής, η μεταβλητή $PATH άλλαξε για όλα τα προγράμματα που καλούνται από το bash. Και δεδομένου ότι όλα τα προγράμματα που εκτελείτε από μια προτροπή bash καλούνται από το bash, η νέα διαδρομή ισχύει για οτιδήποτε εκτελείτε από μια προτροπή bash.

Η ουσία είναι ότι για να προσθέσετε έναν νέο κατάλογο στη διαδρομή, πρέπει να προσθέσετε ή να προσαρτήσετε τον κατάλογο στη μεταβλητή περιβάλλοντος $PATH σε ένα σενάριο που περιλαμβάνεται στο κέλυφος και πρέπει να εξαγάγετε τη μεταβλητή περιβάλλοντος $PATH.

Εδώ και αρκετό καιρό, έχω κρατήσει μαζί μου τις δύο συναρτήσεις pathadd και pathrm , οι οποίες σας βοηθούν να προσθέσετε στοιχεία σε μια διαδρομή χωρίς να ανησυχείτε για διπλασιασμούς.

Το pathadd παίρνει ένα όρισμα διαδρομής και ένα προαιρετικό όρισμα μετά το οποίο, εάν προστεθεί, θα προστεθεί στο PATH, διαφορετικά θα το προσθέσει.

Σε κάθε περίπτωση, εάν προσθέτετε μια διαδρομή, πιθανότατα θέλετε να παρακάμψετε οτιδήποτε υπάρχει ήδη στη διαδρομή, γι' αυτό προτιμώ να προσθέσω την προεπιλογή.

Pathadd() ( newelement=$(1%/) if [ -d "$1" ] && ! echo $PATH | grep -E -q "(^|:)$newelement($|:)" ; τότε αν [ " $2" = "after" ] ; then PATH="$PATH:$newelement" else PATH="$newelement:$PATH" fi fi ) pathrm() ( PATH="$(echo $PATH | sed -e "s; \(^\|:\)$(1%/)\(:\|\$\);\1\2;g" -e "s;^:\|:$;;g" -e "s ;::;:;ζ")" )

Βάλτε τα σε όποιο σενάριο θέλετε για να αλλάξετε το περιβάλλον PATH και τώρα είστε έτοιμοι.

pathadd "/foo/bar" pathadd "/baz/bat" μετά την εξαγωγή PATH

Είναι εγγυημένο ότι δεν θα προσθέσετε τη διαδρομή εάν υπάρχει ήδη. Εάν θέλετε το /baz/bat να ξεκινήσει στην αρχή.

Pathrm "/baz/bat" pathadd "/baz/bat" PATH εξαγωγής

Τώρα κάθε μονοπάτι μπορεί να μετακινηθεί στο μπροστινό μέρος εάν είναι ήδη στο μονοπάτι χωρίς να το διπλασιάσει.

Αλεξίσφαιρος τρόπος προσθήκης/προεργασίας

Υπάρχουν πολλές σκέψεις που εμπλέκονται στην επιλογή της προσθήκης και της προσθήκης. Πολλά από αυτά καλύπτονται σε άλλες απαντήσεις, οπότε δεν θα τα επαναλάβω εδώ.

Το σημαντικό σημείο είναι ότι ακόμα κι αν τα σενάρια συστήματος δεν χρησιμοποιούν αυτό (αναρωτιέμαι γιατί) * 1 , έναν αλεξίσφαιρο τρόπο για να προσθέσετε μια διαδρομή (π.χ. $HOME/bin) στη μεταβλητή περιβάλλοντος PATH

PATH="$(PATH:+$(PATH):)$HOME/bin"

για προσθήκη (αντί για PATH="$PATH:$HOME/bin") και

PATH="$HOME/bin$(PATH:+:$(PATH))"

για προσθήκη (αντί για PATH="$HOME/bin:$PATH")

Με αυτόν τον τρόπο αποφεύγεται η ψευδής άνω και κάτω τελεία όταν το $PATH είναι αρχικά άδειο, το οποίο μπορεί να έχει ανεπιθύμητες παρενέργειες και μπορεί να είναι εφιάλτης για να το βρεις άπιαστα (αυτή η απάντηση αναφέρεται εν συντομία στην περίπτωση awk-way).

$(παράμετρος:+λέξη)

Εάν η παράμετρος είναι μηδενική ή μη καθορισμένη, δεν αντικαθίσταται τίποτα, διαφορετικά η λέξη αντικαθίσταται.

Άρα το $(PATH:+$(PATH):) επεκτείνεται σε: 1) τίποτα εάν το PATH είναι μηδενικό ή μη καθορισμένο, 2) $(PATH): εάν έχει οριστεί PATH.

Σημείωση. Αυτό είναι για bash.

*1 Μόλις διαπίστωσα ότι σενάρια όπως το devtoolset-6/enable χρησιμοποιούν στην πραγματικότητα αυτό το $ cat /opt/rh/devtoolset-6/enable # Γενικές μεταβλητές περιβάλλοντος εξαγωγή PATH=/opt/rh/devtoolset-6/root/usr /bin$ (PATH:+:$(PATH)) ...

Δεν μπορώ να μιλήσω για άλλες διανομές, αλλά το Ubuntu έχει ένα αρχείο /etc/environment που είναι η προεπιλεγμένη διαδρομή αναζήτησης για όλους τους χρήστες. Δεδομένου ότι ο υπολογιστής μου χρησιμοποιείται μόνο από εμένα, βάζω ό,τι καταλόγους θέλω στη διαδρομή μου εκεί, εκτός αν είναι μια προσωρινή προσθήκη που έβαλα στο σενάριο.

Για μένα (σε Mac OS X 10.9.5) η προσθήκη ενός ονόματος διαδρομής (π.χ. /mypathname) στο αρχείο /etc/paths λειτούργησε μια χαρά.

Πριν από την επεξεργασία, επιστρέφεται το echo $PATH:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

Μετά την επεξεργασία του /etc/paths και την επανεκκίνηση του κελύφους, η μεταβλητή $PATH προστίθεται με το /pathname . Πράγματι, το echo $PATH επιστρέφει:

/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/mypathname

Συνέβη ότι το /mypathname προστέθηκε στη μεταβλητή $PATH.

Οι μεταβλητές περιβάλλοντος στο Linux είναι ειδικές μεταβλητές που ορίζονται από το κέλυφος και χρησιμοποιούνται από τα προγράμματα κατά την εκτέλεση. Μπορούν να οριστούν από το σύστημα και τον χρήστη. Οι μεταβλητές περιβάλλοντος συστήματος Linux ορίζονται από το σύστημα και χρησιμοποιούνται από προγράμματα σε επίπεδο συστήματος.

Για παράδειγμα, η εντολή PWD χρησιμοποιεί μια μεταβλητή συστήματος για να διατηρήσει τον παλιό κατάλογο εργασίας. Οι μεταβλητές περιβάλλοντος χρήστη ορίζονται από τον χρήστη, για το τρέχον κέλυφος, προσωρινά ή μόνιμα. Η όλη ιδέα της προσθήκης και αφαίρεσης μεταβλητών φλοιού περιστρέφεται γύρω από πολλά αρχεία, εντολές και διάφορα κελύφη.

Γενικότερα, μια μεταβλητή περιβάλλοντος μπορεί να είναι τριών τύπων:

1. Τοπικές μεταβλητές περιβάλλοντος

Αυτές οι μεταβλητές ορίζονται μόνο για την τρέχουσα περίοδο λειτουργίας. Θα διαγραφούν οριστικά μετά το τέλος της συνεδρίας, αν απομακρυσμένη πρόσβασηή έναν εξομοιωτή τερματικού. Δεν αποθηκεύονται σε κανένα αρχείο, αλλά δημιουργούνται και διαγράφονται χρησιμοποιώντας ειδικές εντολές.

2. Μεταβλητές κελύφους χρήστη

Αυτές οι μεταβλητές φλοιού Linux ορίζονται για έναν συγκεκριμένο χρήστη και φορτώνονται κάθε φορά που ο χρήστης συνδέεται χρησιμοποιώντας ένα τοπικό τερματικό ή συνδέεται εξ αποστάσεως. Τέτοιες μεταβλητές συνήθως αποθηκεύονται σε αρχεία διαμόρφωσης: .bashrc, .bash_profile, .bash_login, .profile ή άλλα αρχεία που βρίσκονται στον κατάλογο του χρήστη.

3. Μεταβλητές περιβάλλοντος συστήματος

Αυτές οι μεταβλητές είναι διαθέσιμες σε όλο το σύστημα, για όλους τους χρήστες. Φορτώνονται κατά την εκκίνηση του συστήματος από τα αρχεία διαμόρφωσης συστήματος: /etc/environment, /etc/profile, /etc/profile.d/ /etc/bash.bashrc.

Αρχεία διαμόρφωσης μεταβλητής περιβάλλοντος Linux

Εδώ, θα ρίξουμε μια γρήγορη ματιά στα διάφορα αρχεία διαμόρφωσης που αναφέρονται παραπάνω, τα οποία χρησιμοποιούνται για τον ορισμό μεταβλητών περιβάλλοντος για ολόκληρο το σύστημα ή έναν συγκεκριμένο χρήστη.

.bashrc

Αυτό είναι ένα αρχείο μεταβλητής συγκεκριμένου χρήστη. Φορτώνεται κάθε φορά που ο χρήστης δημιουργεί μια συνεδρία τερματικού, δηλαδή, με άλλα λόγια, ανοίγει ένα νέο τερματικό. Όλες οι μεταβλητές περιβάλλοντος που δημιουργούνται σε αυτό το αρχείο τίθενται σε ισχύ κάθε φορά που ξεκινά μια νέα περίοδος λειτουργίας τερματικού.

.bash_profile

Αυτές οι μεταβλητές ισχύουν κάθε φορά που ένας χρήστης συνδέεται εξ αποστάσεως μέσω SSH. Εάν αυτό το αρχείο λείπει, το σύστημα θα αναζητήσει .bash_login ή .profile.

/etc/περιβάλλον

Αυτό το αρχείο προορίζεται για τη δημιουργία, την επεξεργασία και τη διαγραφή οποιωνδήποτε μεταβλητών περιβάλλοντος σε επίπεδο συστήματος. Οι μεταβλητές περιβάλλοντος που δημιουργούνται σε αυτό το αρχείο είναι διαθέσιμες για ολόκληρο το σύστημα, για κάθε χρήστη, ακόμη και όταν συνδέονται απομακρυσμένα.

/etc/bash.bashrc

Σύστημα bashrc. Αυτό το αρχείο εκτελείται για κάθε χρήστη, κάθε φορά που δημιουργεί μια νέα συνεδρία τερματικού. Αυτό λειτουργεί μόνο για τοπικούς χρήστες, όταν συνδέονται μέσω Διαδικτύου, τέτοιες μεταβλητές δεν θα είναι ορατές.

/etc/profile

Το προφίλ του αρχείου συστήματος. Όλες οι μεταβλητές σε αυτό το αρχείο είναι διαθέσιμες σε οποιονδήποτε χρήστη του συστήματος μόνο εάν είναι συνδεδεμένος εξ αποστάσεως. Ωστόσο, δεν θα είναι διαθέσιμα κατά τη δημιουργία μιας περιόδου σύνδεσης τοπικού τερματικού, δηλαδή εάν απλώς ανοίξετε ένα τερματικό.

Όλες οι μεταβλητές περιβάλλοντος Linux που δημιουργούνται με αυτά τα αρχεία μπορούν να αφαιρεθούν απλώς διαγράφοντας από εκεί. Μόνο μετά από κάθε αλλαγή, πρέπει είτε να αποσυνδεθείτε και να συνδεθείτε ή να εκτελέσετε αυτήν την εντολή:

όνομα αρχείου πηγής

Προσθήκη μεταβλητών περιβάλλοντος χρήστη και συστήματος στο Linux

Τώρα που ξέρετε λίγη θεωρία, ας προχωρήσουμε στην πράξη. Οι τοπικές μεταβλητές περιβάλλοντος στο Linux μπορούν να δημιουργηθούν με τις ακόλουθες εντολές:

var=τιμή
$export var=value

Αυτές οι μεταβλητές θα είναι διαθέσιμες μόνο για την τρέχουσα περίοδο λειτουργίας τερματικού.

Πολλές εντολές μπορούν να χρησιμοποιηθούν για την κατάργηση μεταβλητών περιβάλλοντος:

1. Χρησιμοποιώντας το env

Από προεπιλογή, το env μπορεί να χρησιμοποιηθεί για την προβολή όλων των καθορισμένων μεταβλητών περιβάλλοντος. Αλλά με την επιλογή -i, σας επιτρέπει να αφαιρέσετε προσωρινά όλες τις μεταβλητές φλοιού και να εκτελέσετε την εντολή χωρίς μεταβλητές.

env -i εντολή

Var είναι οποιαδήποτε μεταβλητή που θέλετε να περάσετε σε αυτήν την εντολή.

Αυτή η εντολή θα ξεκινήσει ένα κέλυφος χωρίς καθόλου μεταβλητές περιβάλλοντος:

Μετά την έναρξη ενός τέτοιου περιβάλλοντος, δεν θα υπάρχουν διαθέσιμες μεταβλητές, αλλά μετά την έξοδο όλα θα επιστρέψουν στη θέση τους.

2. Χρήση απενεργοποίησης

Αυτός είναι ένας άλλος τρόπος για να αφαιρέσετε μεταβλητές περιβάλλοντος Linux. Το Unset καταργεί μια μεταβλητή με το όνομα μέχρι το τέλος της τρέχουσας περιόδου λειτουργίας:

unset variable_name

3. Ορίστε την τιμή της μεταβλητής σε ""

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

Σημείωση: Χρησιμοποιώντας αυτές τις μεθόδους, μπορείτε να αλλάξετε τις τιμές των μεταβλητών συστήματος ή χρήστη, αλλά θα είναι σχετικές μόνο για την τρέχουσα περίοδο λειτουργίας.

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

Σε αυτήν την ενότητα, θα εξετάσουμε πώς να ορίσετε και να αφαιρέσετε μεταβλητές συστήματος και χρήστη όχι μόνο για την τρέχουσα περίοδο λειτουργίας, αλλά έτσι ώστε το αποτέλεσμα να παραμένει μετά από μια επανεκκίνηση.

1. Ορίστε και αφαιρέστε τοπικές μεταβλητές στο Linux

Ας δημιουργήσουμε μια τοπική μεταβλητή VAR και ας την ορίσουμε σε οποιαδήποτε τιμή, στη συνέχεια την καταργήσουμε με unset και βεβαιωθείτε ότι έχει αφαιρεθεί:

VAR1="Απώλεια"
$ echo $VAR1
$ καταργήθηκε το VAR1
$ echo $VAR1

Ένας άλλος τρόπος για να δημιουργήσετε μια μεταβλητή είναι με την εντολή εξαγωγής. Καταργήστε το εκχωρώντας μια κενή τιμή:

εξαγωγή VAR="Απώλεια"
$ echo $VAR
$var=
$ echo $VAR

Τώρα ας δημιουργήσουμε μια μεταβλητή VAR2 και ας της δώσουμε μια τιμή. Και στη συνέχεια αφαιρέστε προσωρινά όλες τις τοπικές μεταβλητές εκτελώντας το env -i. Θα ξεκινήσει το κέλυφος χωρίς μεταβλητές. Αφού πληκτρολογήσετε exit, όλες οι μεταβλητές θα αποκατασταθούν.

VAR2="Απώλεια"
$ echo $VAR2
$ env -i bash
$ echo $VAR2

Ρύθμιση και κατάργηση μεταβλητών χρήστη

Επεξεργαστείτε το αρχείο .bashrc στον αρχικό σας κατάλογο προσθέτοντας μια εντολή εξαγωγής για να εξαγάγετε την επιθυμητή μεταβλητή. Στη συνέχεια, εκτελέστε την εντολή πηγής για να εφαρμόσετε τις αλλαγές. Ας δημιουργήσουμε, για παράδειγμα, μια μεταβλητή CD:

Προσθέστε αυτήν τη γραμμή (o, μετά επικόλληση, μετά Esc και :wq):

εξαγωγή CD="This is Lost Home"

Τώρα απομένει να ενημερώσετε τη διαμόρφωση:

πηγή .bashrc
$ echo $CD

Για να καταργήσετε αυτήν τη μεταβλητή, απλώς αφαιρέστε την από το .bashrc.

Τώρα ας προσθέσουμε μια μεταβλητή περιβάλλοντος με .bash_profile. Αυτή η μεταβλητή, όπως ήδη γνωρίζετε, θα είναι διαθέσιμη μόνο όταν συνδεθείτε εξ αποστάσεως:

vi .bash_profile

Προσθέστε μια γραμμή:

εξαγωγή VAR2="Αυτό είναι το χαμένο σπίτι"

Και εκτελέστε αυτές τις εντολές για να εφαρμόσετε τις αλλαγές και να δοκιμάσετε την προσθήκη μεταβλητής:

πηγή .bash_profile
$ echo $VAR2

Η μεταβλητή δεν είναι διαθέσιμη επειδή έχετε δημιουργήσει μια τοπική συνεδρία τερματικού, συνδεθείτε τώρα μέσω ssh:

ssh [email προστατευμένο]
$ echo $VAR2

Μπορείτε να διαγράψετε αυτήν τη μεταβλητή περιβάλλοντος με τον ίδιο τρόπο όπως στην προηγούμενη περίπτωση, διαγράφοντας τη από το αρχείο.

Σχόλιο: Αυτές οι μεταβλητές είναι πάντα διαθέσιμες, αλλά όχι για όλους τους χρήστες.

Ρύθμιση και κατάργηση μεταβλητών περιβάλλοντος συστήματος

Ας δημιουργήσουμε μια μεταβλητή διαθέσιμη σε όλους τους χρήστες σε όλες τις περιόδους σύνδεσης τερματικού εκτός από τις απομακρυσμένες, προσθέτοντάς την στο /etc/bash.profile:

vi /etc/bash.profile

εξαγωγή VAR="Αυτή είναι μια μεταβλητή σε όλο το σύστημα"

Στη συνέχεια ενημερώνουμε:

πηγή /etc/bash.bashrc

Τώρα αυτή η μεταβλητή είναι διαθέσιμη σε όλους τους χρήστες, σε όλα τα τερματικά:

echo $VAR
$ sudo su
$ echo $VAR
$su-
$ echo $VAR

Εάν θέλετε να κάνετε τη μεταβλητή περιβάλλοντος διαθέσιμη σε όλους τους χρήστες που συνδέονται σε αυτό το μηχάνημα εξ αποστάσεως, επεξεργαστείτε το αρχείο /etc/profile:

εξαγωγή VAR1="Αυτή είναι μια μεταβλητή σε όλο το σύστημα μόνο για απομακρυσμένες συνεδρίες"

Ενημερώστε τη διαμόρφωση και ελέγξτε τη διαθεσιμότητα της μεταβλητής, θα είναι διαθέσιμη μόνο εξ αποστάσεως:

πηγή /etc/profile
$ echo $VAR1

Εάν χρειάζεται να προσθέσετε μια μεταβλητή περιβάλλοντος στο Linux ώστε να είναι διαθέσιμη τόσο σε απομακρυσμένες όσο και σε τοπικές περιόδους λειτουργίας, εξάγετε την στο /etc/environment:

vi /etc/environment

εξαγωγή VAR12="Είμαι διαθέσιμος παντού"

Ελέγχουμε:

πηγή /etc/environment
$ echo $VAR12
$ sudo su
$ echo $VAR12
$έξοδος
$ ssh localhost
$ echo $VAR12

mob_info