Τρέχω Ubuntu 11.04. Χρησιμοποιώ το τερματικό για να ξεκινήσω μια συνεδρία bash και θέλω να προσθέσω μια μεταβλητή περιβάλλοντος:
$r@hajt:~$ env THEVAR=/example
Αλλά δεν λειτουργεί. Δείχνει όλες τις μεταβλητές με την THEVAR να είναι η τελευταία, αλλά μια άλλη κλήση στο env
δεν δείχνει πια την THEVAR
- το env | grep THEVAR
δεν επιστρέφει τίποτα.
Ομοίως, τα σενάρια με export (export THEVAR=/example
) ή άλλες αναθέσεις μεταβλητών (THEVAR=/example
) δεν προσθέτουν τη μεταβλητή περιβάλλοντος.
Ξέρω ότι κάνω κάτι λάθος, ξέρω ότι θα έπρεπε να είναι κάτι απλό, αλλά δεν μπορώ να βρω τι.
ΕΝΗΜΕΡΩΣΗ: Το πραγματικό νόημα της ερώτησής μου ήταν αυτό: https://stackoverflow.com/questions/496702/can-a-shell-script-set-environment-variables-of-the-calling-shell
(Τέλος πάντων, θα επιλέξω την πιο ψηφισμένη απάντηση και θα αφήσω τον επεξεργασμένο τίτλο -δεν ήταν αυτό που ρωτούσα)
Το env
εκτελεί ένα πρόγραμμα σε ένα τροποποιημένο περιβάλλον και στη συνέχεια απορρίπτει όλες τις αλλαγές.
Για να ορίσετε μεταβλητή μόνο για το τρέχον κέλυφος:
VARNAME="my value"
Για να την ορίσετε για το τρέχον κέλυφος και όλες τις διεργασίες που εκκινούνται από το τρέχον κέλυφος:
export VARNAME="my value" # shorter, less portable version
Για να το ορίσετε μόνιμα για όλες τις μελλοντικές συνεδρίες bash προσθέστε μια τέτοια γραμμή στο αρχείο .bashrc
στον κατάλογο $HOME
.
Για να την ορίσετε μόνιμα και σε όλο το σύστημα (όλοι οι χρήστες, όλες οι διεργασίες) προσθέστε τη μεταβλητή set στο αρχείο /etc/environment:
sudo -H gedit /etc/environment
Αυτό το αρχείο δέχεται μόνο αναθέσεις μεταβλητών όπως:
VARNAME="my value"
Μην χρησιμοποιείτε τη λέξη κλειδί export
εδώ.
Πρέπει να αποσυνδεθείτε από τον τρέχοντα χρήστη και να συνδεθείτε ξανά, ώστε να πραγματοποιηθούν οι αλλαγές στις μεταβλητές περιβάλλοντος.
Για να ορίσετε μια μεταβλητή περιβάλλοντος μία φορά, χρησιμοποιήστε την εντολή export
στην προτροπή, όχι σε ένα σενάριο κελύφους:
$ export THEVAR=/example
Η μεταβλητή θα είναι ρυθμισμένη για το υπόλοιπο της συνεδρίας κελύφους ή μέχρι να μη ρυθμιστεί.
Για να ορίσετε μια μεταβλητή περιβάλλοντος κάθε φορά, χρησιμοποιήστε την εντολή export
στο αρχείο .bashrc
(ή στο κατάλληλο αρχείο αρχικοποίησης για το κέλυφος σας).
Για να ορίσετε μια μεταβλητή περιβάλλοντος από ένα σενάριο, χρησιμοποιήστε την εντολή export
στο σενάριο και στη συνέχεια source
το σενάριο. Εάν εκτελέσετε το σενάριο δεν θα λειτουργήσει.
Για μια εξήγηση της διαφοράς μεταξύ της προέλευσης και της εκτέλεσης δείτε αυτή την απάντηση: https://superuser.com/questions/176783/what-is-the-difference-between-executing-a-bash-script-and-sourcing-a-bash-script/176788#176788
Για να προσθέσετε μόνιμα μια νέα μεταβλητή περιβάλλοντος στο Ubuntu (δοκιμασμένη μόνο στην έκδοση 14.04), ακολουθήστε τα παρακάτω βήματα:
sudo -H gedit /etc/environment
FOO=bar
, τότε απλά γράψτε FOO=bar
σε μια νέα γραμμή