Πώς μπορώ να ορίσω μια μεταβλητή περιβάλλοντος χρήστη; (μόνιμα, όχι σε περίοδο λειτουργίας)

Αυτό με εκνευρίζει. Είδα αρκετές προτάσεις (όλες με διαφορετικά αρχεία και σύνταξη) και καμία από αυτές δεν λειτούργησε.

Πώς μπορώ να ορίσω μια μεταβλητή περιβάλλοντος για έναν συγκεκριμένο χρήστη; Είμαι σε debian squeeze. Ποια είναι η ακριβής σύνταξη που πρέπει να βάλω στο αρχείο για να κάνω ABC = "123"?

Λύση

Πρέπει να τοποθετήσετε τη δήλωση στα αρχεία αρχικοποίησης του κελύφους σας:

  • Αν χρησιμοποιείτε bash, ash, ksh ή κάποιο άλλο κέλυφος τύπου Bourne, μπορείτε να προσθέσετε

     ABC="123"; export ABC

στο αρχείο σας .profile (${HOME}/.profile). Αυτή είναι η προεπιλεγμένη κατάσταση στις περισσότερες εγκαταστάσεις Unix, και ειδικότερα στο Debian.

Αν το κέλυφος σύνδεσης είναι το bash, μπορείτε να χρησιμοποιήσετε το αρχείο .bash_profile (${HOME}/.bash_profile) ή το αρχείο .bash_login αντί αυτού.

Σημείωση: Αν υπάρχει κάποιο από αυτά τα αρχεία και το κέλυφος σύνδεσής σας είναι bash, το .profile δεν διαβάζεται όταν συνδέεστε μέσω ssh ή σε μια κονσόλα κειμένου, αλλά μπορεί ακόμα να διαβαστεί αντί του .bash_profile αν συνδεθείτε από το GUI. Επίσης, αν δεν υπάρχει το .bash_profile, τότε χρησιμοποιήστε το .bashrc.

  • Αν έχετε ορίσει το zsh ως το κέλυφος σύνδεσης, χρησιμοποιήστε το ~/.zprofile αντί του ~/.profile.

  • Αν χρησιμοποιείτε tcsh, προσθέστε

     setenv ABC "123&quot,

στο αρχείο .login (${HOME}/.login)

  • αν χρησιμοποιείτε κάποιο άλλο κέλυφος κοιτάξτε στο εγχειρίδιο του κελύφους πώς να ορίσετε τις μεταβλητές περιβάλλοντος και ποια αρχεία εκτελούνται κατά την εκκίνηση του κελύφους.
Σχόλια (12)

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

path="$(grep $USER /etc/passwd | cut -d ':' -f 7)"
shell="$(basename -- "$path")"

Στη συνέχεια, πρέπει να βρείτε ποια dot-files θα διάβαζε κανονικά αυτό το κέλυφος:

man $shell

Μια συντόμευση που μπορεί να δουλέψει είναι να απαριθμήσετε εκείνα τα dot-files που περιέχουν το όνομα του κελύφους:

ls ~/.*${shell}*

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

echo .bashrc

Κατά την είσοδο, θα πρέπει τότε να δείτε ποια αρχεία διαβάζονται και μπορείτε να αποφασίσετε ποιο από αυτά να τροποποιήσετε. Προσέξτε ότι δεν θα πρέπει να προσπαθήσετε να χρησιμοποιήσετε το echo "$0" ή κάτι παρόμοιο, επειδή η τιμή του $0 εξαρτάται από τον τρόπο με τον οποίο το κέλυφος επεξεργάζεται τα dot-files, και θα μπορούσε να είναι παραπλανητική.

Όταν πρόκειται για τη δήλωση της μεταβλητής "μόνιμα", σημειώστε ότι αυτό επεκτείνεται μόνο στη συνεδρία. Δεν υπάρχει κανένας τρόπος πρόσβασης στην τιμή μιας μεταβλητής χωρίς συνεδρία, οπότε δεν έχει καμία σημασία εκτός συνεδρίας. Αν εννοείτε "read-only", αυτό εξαρτάται από το κέλυφος, και στο Bash μπορείτε να χρησιμοποιήσετε:

declare -r VAR

αν έχει ήδη μια τιμή, ή

declare -r VAR=value

για να την εκχωρήσετε ταυτόχρονα. Δεν διαθέτουν όλα τα κελύφη αυτή τη δυνατότητα.

Για να δηλώσετε μια μεταβλητή στα περισσότερα κελύφη, θα πρέπει να χρησιμοποιήσετε ένα όνομα μεταβλητής ([A-Za-z_][A-Za-z0-9_]*), ακολουθούμενο από ένα σύμβολο ισότητας (και χωρίς κενά γύρω από το σύμβολο ισότητας), και στη συνέχεια μια τιμή (κατά προτίμηση σε εισαγωγικά εκτός αν η τιμή είναι ένα απλό [A-Za-z0-9_]+). Για παράδειγμα:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1
Σχόλια (0)

Χρησιμοποιήστε την εξαγωγή.

export ABC="123"

Για να ελέγξετε αν έχει οριστεί, χρησιμοποιήστε

env

ή/και

env | grep ABC

Για να το προσθέσετε μόνιμα, προσθέστε αυτό στο αρχείο σας ~/.bashrc.

export ABC="123"
Σχόλια (6)