Wie lege ich eine Benutzerumgebungsvariable fest? (permanent, nicht Sitzung)

145

Das irritiert mich. Ich habe mehrere Vorschläge gesehen (alle mit unterschiedlichen Dateien und Syntax) und keiner von ihnen hat funktioniert.

Wie lege ich eine Umgebungsvariable für einen bestimmten Benutzer fest? Ich bin auf Debian Squeeze. Was ist die genaue Syntax, die ich in die Datei einfügen sollte, um ABC = "123" zu erhalten?

Gilles
quelle
7
Was hast du schon probiert?
28.
1
Bearbeiten von .bashrc, .bash_profile, .profile und .ssh / eviroment. Obwohl ich nicht weiß, ob ich es an der richtigen Stelle geschrieben habe oder jedes Mal die richtige Syntax hatte
4
.bashrcist der Hauptort dafür.
rozcietrzewiacz
@rozcietrzewiacz: ok aber ... auch nach der lösung habe ich versucht abc1 und abc2 am anfang und ende dieser datei zu setzen und es ist nicht in meiner umgebung eingestellt.
1
Überprüfen Sie, dass so .bash_profileetwas enthält [[ -f ~/.bashrc ]] && . ~/.bashrc.
rozcietrzewiacz

Antworten:

113

Sie müssen die Deklaration in die Initialisierungsdateien Ihrer Shell einfügen:

  • Wenn Sie bash, ash, ksh oder eine andere Bourne-Shell verwenden, können Sie hinzufügen

    ABC="123"; export ABC
    

    in deiner .profileDatei ( ${HOME}/.profile). Dies ist die Standardsituation bei den meisten Unix-Installationen und insbesondere bei Debian.

    Wenn Ihre Login-Shell bash ist, können Sie .bash_profile( ${HOME}/.bash_profile) oder .bash_loginstattdessen verwenden.

    Hinweis: Wenn eine dieser Dateien vorhanden ist und Ihre Anmeldeshell bash ist, .profilewird sie beim Anmelden über ssh oder auf einer Textkonsole nicht gelesen. Sie wird jedoch möglicherweise weiterhin gelesen, anstatt sich über .bash_profiledie GUI anzumelden. Wenn dies nicht der Fall ist .bash_profile, verwenden Sie .bashrc.

  • Wenn Sie zsh als Anmeldeshell festgelegt haben, verwenden Sie ~/.zprofileanstelle von ~/.profile.

  • Wenn Sie tcsh verwenden, fügen Sie hinzu

    setenv ABC "123"
    

    in .loginfile ( ${HOME}/.login)

  • Wenn Sie eine andere Shell verwenden, lesen Sie im Shell-Handbuch nach, wie Umgebungsvariablen definiert werden und welche Dateien beim Starten der Shell ausgeführt werden.

Matteo
quelle
5
Das Standardverhalten von su userist, den Besitz der aktuellen Shell in den Benutzernamen arg zu ändern, während das Ausgangsverzeichnis und die Umgebung des aufrufenden Benutzers beibehalten werden. Um eine Shell so aufzurufen, dass sie der neue Benutzer wird und alle Umgebungseinstellungen ($ PATH, $ HOME, $ ABC usw.) erhält, müssen Sie als erstes Argument an su ein - übergeben. su - usernamewird das erreichen, wonach du fragst.
Tim Kennedy
1
Warten Sie: Was meinen Sie mit "Exited to Root"? Auf jeden Fall macht eine ‚so‘ ist nicht initialisiert die Shell. Du brauchst 'su -' (siehe man su)
Matteo
1
Warum hast du sudas überhaupt gemacht? Haben Sie nicht gerade ein Root-Verzeichnis erstellt .profile, das vom Benutzer nicht verwendet werden kann?
rozcietrzewiacz
1
@acid das ist , was sollte getan haben. Die Frage ist, was beim Anmelden bezogen wird. Um dies zu überprüfen, melden Sie sich zuerst ab.
rozcietrzewiacz
7
Da .profilevon allen Bourne-kompatiblen Shells gelesen wird, sollten Sie in diese Datei keine Bash-Syntax schreiben. Insbesondere export VARIABLE=valuemuss überarbeitet werden VARIABLE=value; export VARIABLE.
Tripleee
48

Verwenden Sie die /etc/environmentDatei zum Festlegen der Umgebungsvariablen. Fügen Sie dann die folgende Zeile in die /etc/environmentDatei ein.

ABC="123"

Jetzt kann von allen Benutzersitzungen auf die ABC- Variable zugegriffen werden. Um die Variablenausgabe zu testen, aktualisieren Sie zuerst die Umgebungsvariable mit dem Befehl

source /etc/environment

und renne echo $ABC.

Hokam
quelle
4
+1 für den Quellbefehl. Das fehlte in allen Antworten
Nerrve
5
Seien Sie vorsichtig, da /etc/environmentdies nicht die vollständige Bash-Syntax unterstützt, was ich auf die harte Tour herausgefunden habe. Zum Beispiel funktioniert das Setzen PATH="/usr/bin:/usr/sbin"und Ausführen PATH="$PATH:/foo/bar"einer folgenden Zeile nicht
user2428118
Unsicher, ob dies ein persönliches Problem ist oder was, aber ich musste mein Betriebssystem /etc/environmentneu starten, nachdem ich dies eingestellt hatte , selbst wenn ich das Bash-Terminal neu gestartet oder etwas eingegeben hatte source /etc/environment. Wenn Sie also Probleme haben, bei denen die Umgebungsvariable nicht aufrechterhalten wird, versuchen Sie einen Neustart.
Blairg23
9

Dies ist eine allgemeine Prozedur, die Sie für so ziemlich jede Shell verwenden können. In jedem Fall müssen Sie wissen, mit welcher Shell sich der Benutzer normalerweise anmeldet:

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

Dann müssen Sie herausfinden, welche Punktedateien diese Shell normalerweise lesen würde:

man $shell

Eine Verknüpfung, die funktionieren könnte, besteht darin, die Punktedateien aufzulisten, die den Shell-Namen enthalten:

ls ~/.*${shell}*

Wenn Sie überprüfen möchten, ob eine der Dateien beim Anmelden tatsächlich gelesen wurde, können Sie einfach den Dateinamen in jeder Datei ausdrucken. Beispiel:

echo .bashrc

Wenn Sie sich anmelden, sollten Sie sehen, welche Dateien gelesen werden, und Sie können entscheiden, welche Sie ändern möchten. Beachten Sie, dass Sie nicht versuchen sollten , Dot-Files echo "$0"oder ähnliches zu verwenden, da der Wert von $0davon abhängt, wie die Shell Dot-Files verarbeitet, und irreführend sein kann.

Beachten Sie beim Deklarieren der Variablen "permanent", dass dies nur für die Sitzung gilt. Es gibt keine Möglichkeit, auf den Wert einer Variablen ohne Sitzung zuzugreifen, daher hat sie keine Bedeutung außerhalb einer Sitzung. Wenn Sie "schreibgeschützt" meinen, ist dies von der Shell abhängig. In Bash können Sie Folgendes verwenden:

declare -r VAR

wenn es bereits einen Wert hat, oder

declare -r VAR=value

gleichzeitig zuweisen. Nicht alle Shells verfügen über diese Funktion.

Um eine Variable in den meisten Shells zu deklarieren, sollten Sie einen Variablennamen ( [A-Za-z_][A-Za-z0-9_]*), gefolgt von einem Gleichheitszeichen (und keinen Leerzeichen um das Gleichheitszeichen) und einem Wert (vorzugsweise in Anführungszeichen gesetzt, sofern der Wert nicht einfach ist [A-Za-z0-9_]+) verwenden. Zum Beispiel:

name="John Doe"
ip=127.0.0.1
HORRIBLE=1
l0b0
quelle
5

Verwenden Sie den Export.

export ABC="123"

Um zu überprüfen, ob es eingestellt ist, verwenden Sie

env

und / oder

env | grep ABC

Um es dauerhaft hinzuzufügen, fügen Sie es Ihrer ~/.bashrcDatei hinzu.

export ABC="123"
Wer bin ich
quelle
6
Er möchte wissen, heiß, um es dauerhaft zu definieren , dh, in welche Datei die Definition zu setzen.
Matteo
1
Funktioniert nicht Sobald ich mich auslogge, ist die Variable weg. Ich brauche es über Sitzungen
1
du meinst permenateund nicht permenently: D
whoami
schau auf edit forbashrc
whoami
5
was permenate? meinst du permanent?
SSH Dieser
3

Der genaue Befehl lautet:

echo 'export ABC = "123"' >> ~/.profile
Иван Бишевац
quelle
4
Genau? Ernsthaft? Welche Shell (a) liest ~/.profileund (b) lässt vorher und nachher Platz =?
G-Man
1

Das Beste, was für mich funktioniert hat, ist das Ändern der .bashrc-Datei in der BASH-Shell.

Verwenden Sie dies zum Beispiel:

  1. öffne deine .bashrc Datei
  2. füge diese Zeile hinzu:

    export <VARIABLE> = "<ANY PATH/VALUE you want>"
    

    z.B : export HOME = "/home/user/"

    Denken Sie daran, ""als zu verwenden, ' 'wird nicht funktionieren und Ihre bashrc-Datei wird Fehler beim Sourcing melden.

  3. Quell es in der aktuellen Sitzung.

Ich habe auch versucht, die Datei / etc / environment zu ändern, konnte jedoch keine neue Umgebungsvariable erstellen. Als ich sie bezogen habe, wurde der Fehler gemeldet, dass die definierte Variable nicht gefunden wurde.

Ayushi Agarwal
quelle