Machen Sie $ JAVA_HOME in Ubuntu leicht veränderbar [geschlossen]

139

In Ubuntu möchte ich meine Umgebungsvariable JAVA_HOME zwischen Java 5 und 6 hin und her wechseln.

Ich öffne ein Terminal und gebe Folgendes ein, um die Umgebungsvariable JAVA_HOME festzulegen:

export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun

Und im selben Terminalfenster gebe ich Folgendes ein, um zu überprüfen, ob die Umgebungsvariable aktualisiert wurde:

echo $JAVA_HOME

Und ich sehe /usr/lib/jvm/java-1.5.0-sun , was ich erwartet habe. Außerdem ändere ich ~ / .profile und setze die Umgebungsvariable JAVA_HOME auf /usr/lib/jvm/java-1.5.0-sun.

Und jetzt zum Problem: Wenn ich ein neues Terminalfenster öffne und meine JAVA_HOME-Umgebungsvariable durch Eingabe von echo $ JAVA_HOME überprüfe, sehe ich, dass meine JAVA_HOME-Umgebungsvariable auf Java 6 zurückgesetzt wurde. Wenn ich meinen Computer (oder mein Protokoll) neu starte Ich nehme an, die Umgebungsvariable JAVA_HOME ist auf Java 5 gesetzt (vermutlich aufgrund der Änderungen, die ich in meinem ~ / .profile vorgenommen habe).

Gibt es eine Möglichkeit , um dieses so , dass ich ohne meine JAVA_HOME Umgebung ändern können , um sich abzumelden und wieder in (und das Umgebungsvariablen ändern machen Stick in allen neuen Terminal - Fenster)?

Junho Park
quelle
29
Was ist die richtige Seite und die doppelte Antwort?
Martin Konicek
Die ~/.profileDatei wird nur gelesen, wenn Sie sich bei Ubuntu anmelden. Wenn Sie sich also abmelden / anmelden, wird JAVA_HOME für alle Terminals und alle anderen von Ihnen ausgeführten Anwendungen festgelegt. Wenn Sie JAVA_HOME festlegen ~/.bashrc, wird dies nur von Anwendungen angezeigt, die vom Terminal ausgeführt werden.
jr0cket

Antworten:

196

Fügen Sie die Umgebungsvariablen in die globale /etc/environmentDatei ein:

...
export JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun
...

Führen Sie "source / etc / environment" in jeder Shell aus, in der die Variablen aktualisiert werden sollen:

$ source /etc/environment

Überprüfen Sie, ob es funktioniert:

$ echo $JAVA_HOME
$ /usr/lib/jvm/java-1.5.0-sun

Großartig, kein Abmelden erforderlich.

Wenn Sie die Umgebungsvariable JAVA_HOME nur im Terminal festlegen möchten, legen Sie sie in der Datei ~ / .bashrc fest .

Martin Konicek
quelle
9
Ein Neustart ist noch erforderlich, damit sich diese Änderungen auf Apps auswirken, die über die Ubuntu-Benutzeroberfläche gestartet wurden (dh Doppelklick auf eine App)
Eric Hu
7
Wie unterscheidet sich das von der Einstellung der Variablen in jeder verdammten Shell?
mlissner
1
Eine andere Möglichkeit, dies nicht jedes Mal manuell ausführen zu müssen, besteht darin, Ihre .bashrc-Datei so zu ändern, dass sie den Befehl "source / etc / environment" enthält
nityan
1
@MartinKonicek Ihr Beispiel ist falsch. In dieser Zeile sollte kein Export erfolgen. / etc / environment enthält Schlüsselwertpaare
pdeva
1
Denken Sie daran, dass dies etwas /etc/environmentBesonderes ist und keine Variablensubstitution zulässt, z JRE_HOME=${JAVA_HOME}/jre. B. nicht funktioniert.
Abdull
31

Dies wird wahrscheinlich Ihr Problem lösen: https://help.ubuntu.com/community/EnvironmentVariables

Sitzungsweite Umgebungsvariablen

Um Umgebungsvariablen so festzulegen, dass sie sich auf die Umgebung eines bestimmten Benutzers auswirken, sollten Sie keine Befehle zum Festlegen ihrer Werte in bestimmten Shell-Skriptdateien im Home-Verzeichnis des Benutzers platzieren, sondern Folgendes verwenden:

~ / .pam_environment - Diese Datei dient speziell zum Festlegen der Umgebung eines Benutzers. Es ist keine Skriptdatei, sondern besteht aus Zuweisungsausdrücken, einer pro Zeile.

Nicht empfohlen:

~ / .profile - Dies ist wahrscheinlich die beste Datei zum Platzieren von Umgebungsvariablenzuweisungen, da sie vom DisplayManager während der Desktop-Sitzung des Startvorgangs sowie von der Anmeldeshell automatisch ausgeführt wird, wenn Sie sich über die Textkonsole anmelden.

Holger Frohloff
quelle
Über den von Ihnen angegebenen Link: "Die folgenden Informationen werden nicht empfohlen, aber die vorherige Lösung (?) Auf dieser Seite hat mit der Desktop-Version 10.04 nicht funktioniert. .Pam_environment wird bei der Verteilung natürlich nicht verarbeitet."
Calmarius
14
~ / .pam_environment ist eine großartige Möglichkeit, Ihr Login zu blockieren, wenn Sie davon ausgehen, dass es Variablen verarbeitet. Ich habe versucht, PATH auf $ {PATH}: $ {HOME} / bin zu setzen, aber die Variablen konnten nicht ausgewertet werden. Nettoergebnis: kann sich nicht anmelden :( Behoben durch Aufrufen von Strg-Alt-1 und Ausführen von "/ bin / rm ~ / .pam_environment". Seien Sie besonders vorsichtig oder verwenden Sie ein sekundäres Konto, um die Einstellungen hier zu testen.
Alain O'Dea
6
Persönlich weiß ich nicht, warum sie sich die Mühe gemacht haben, die Umgebungsdatei zu erstellen, und sie dann auf eine völlig andere Weise funktionieren ließ als jeder andere Mechanismus zum Festlegen von Umgebungsvariablen, der jemals zuvor funktioniert hat. Einfache Schlüsselwertpaare, wie sie in der Umgebungsdatei verwendet werden, sind einfache BS. Es gibt einen Grund, warum wir Variablen und Links in der Umgebung verwenden, und das hat auch heute noch Vorteile. Es vereinfacht die Verwaltung. Wer auch immer die Bozos sind, die entschieden haben, dass die PAM-Methode in dieser Datei am besten ist, sind bestenfalls Schwachköpfe. Variablen MÜSSEN interpretiert werden.
Bill Rosmus
1
@ AlainO'Dea: Ich hatte genau das gleiche Problem. Schockiert und besorgt, als ich nicht am Anmeldebildschirm vorbeikam. Nach einigem Stöbern stellte ich fest, dass Sie Variablen verwenden können, aber eine andere Syntax verwenden müssen. z.B. PATH DEFAULT = $ {PATH}: $ {HOME} / bin Wenn keine Variable verwendet wird, scheint eine einfache Zuweisung zu funktionieren.
tim_wonil
Ja, ich stimme @ AlainO'Dea zu. Wenn in Ihrem Skript ein Fehler auftritt, können Sie sich nicht anmelden. Pass auf.
Evan Hu
13

Versuchen Sie diese Schritte.

- Wir werden "etc \ profile" bearbeiten. Die Umgebungsvariablen sind am Ende der Datei einzugeben. Da Ubuntu keinen Zugriff auf den Stammordner gewährt, müssen wir einige Befehle im Terminal verwenden

Schritt 1: Starten Sie das Terminal. Befehl eingeben:gksudo gedit /etc/profile

Schritt 2: Die Profiltextdatei wird geöffnet. Geben Sie die Umgebungsvariablen am unteren Rand der Seite ........... ZB: export JAVA_HOME=/home/alex/jdk1.6.0_22/bin/java

export PATH=/home/alex/jdk1.6.0_22/bin:$PATH

Schritt 3: Speichern und schließen Sie die Datei. Überprüfen Sie, ob die Umgebungsvariablen unter Verwendung von echo - Befehl gesetzt werden ........ Eg echo $PATH

Alex
quelle
9

Sie müssen die Variablendefinition in die ~/.bashrcDatei einfügen.

Von der Bash-Manpage:

Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest bash Befehle aus /etc/bash.bashrc und ~ / .bashrc und führt sie aus, sofern diese Dateien vorhanden sind.

Paweł Nadolski
quelle
5

Wenn Sie die Variable nur in Ihren Terminalfenstern ändern möchten, legen Sie sie traditionell in einer .bashrcDatei fest, die bei jedem Öffnen eines neuen Terminals bezogen wird. .profileDie Datei wird nicht jedes Mal bezogen, wenn Sie ein neues Terminal öffnen.

Sehen Sie den Unterschied zwischen .profile und .bashrc in Frage: Was ist der Unterschied zwischen .bashrc, .bash_profile und .environment?

.bashrcsollte Ihr Problem lösen. Es ist jedoch nicht die richtige Lösung, da Sie Ubuntu verwenden. Weitere Informationen finden Sie auf der entsprechenden Ubuntu-Hilfeseite " Sitzungsweite Umgebungsvariablen ". Kein Wunder also, dass .profiledas bei Ihnen nicht funktioniert. Ich benutze Ubuntu 12.04 und xfce. Ich habe meine eingerichtet .profileund sie wird einfach nicht wirksam, selbst wenn ich mich ab- und anmelde. Ähnliche Erfahrungen hier . Sie müssen also möglicherweise die .pam_environmentDatei verwenden und völlig vergessen .profile, und .bashrc. Und HINWEIS: Dies .pam_environmentist keine Skriptdatei.

HongboZhu
quelle
1

Schauen Sie sich an bash(1), Sie benötigen eine Login-Shell, um die ~/.profile, dh die -lOption, aufzunehmen.

Nikolai Fetissov
quelle
1

Nachdem Sie Änderungen an .profile vorgenommen haben, müssen Sie die Datei ausführen, damit die Änderungen wirksam werden.

root@masternode# . ~/.profile

Sobald dies erledigt ist, funktioniert der Echo-Befehl.

CodeShane
quelle
Sie sollten ~/.profileeher als verwenden ./.profile.
Alexis Wilke