Ich verwende zsh
als meine Shell und versuche, meine Umgebung zu konfigurieren.
Normalerweise definiere ich meine $JAVA_HOME
Variable durch Erstellen einer Datei:
/etc/profile.d/java.sh
mit folgendem Inhalt
export JAVA_HOME=/path/to/jdk
export PATH=$JAVA_HOME/bin:$PATH
dann logge ich mich aus und wieder ein und alles funktioniert, aber aus irgendeinem Grund ist die PATH
Variable nicht gesetzt. Es erkennt JAVA_HOME
, aber nicht das neue PATH
, siehe dieses Terminal-Snippet:
~ echo $JAVA_HOME
/usr/lib/jvm/jdk1.8.0_05
~ echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
und ich bestätigte es, indem ich versuchte, einen Befehl aus dem JVM auszuführen
~ java -version
zsh: command not found: java
das PATH
schließt nicht das mit ein, $JAVA_HOME
wie es sollte. Gibt es noch etwas, das ich überprüfen sollte?
Ich habe das überprüft, wenn ich laufe:
source /etc/profile.d/java.sh
es läuft alles korrekt und meine Variablen werden so gesetzt, wie sie sollten, aber sollten die Skripte /etc/profile.d
nicht automatisch ausgeführt werden?
quelle
~/.profile
stattdessen versucht , die Variablen dort zu bearbeiten und zu platzieren? MöglicherweisePATH
wird das an anderer Stelle in überschrieben/etc/profile.d/
.Antworten:
Aus meiner Sicht ist es am besten, die folgenden Zeilen in die
~/.zshrc
Datei einzufügen (wenn Sie sie noch nicht haben, dann erstellen Sie sie):Starten Sie dann Ihren Computer neu
zsh
oder führen Sie ihn einfach aus,source ~/.zshrc
und Ihr PFAD sollte genau so sein, wie Sie es wünschen.Wenn Sie die Änderung systemweit vornehmen möchten, fügen Sie den vorherigen Code am Ende der
/etc/zsh/zshenv
Datei hinzu.Aber auf keinen Fall
/etc/profile.d
zum automatischen Ausführen von Skripten verwendenzsh
. Dieses Verzeichnis ist nur für diebash
Shell nützlich , nichtzsh
wie in Ihrem Fall. Um dies zu verstehen, öffnen Sie die/etc/profile
Datei, die eine Bash- Initialisierungsdatei und in keinem Fall eine zsh- Initialisierungsdatei ist , und Sie sehen irgendwo am Ende der Datei:Also, Ihre Skripte von
/etc/profile.d
Verzeichnis werden automatisch ausgeführt ,zsh
nur wenn Sie den vorherigen Code in einer zsh Initialisierung Datei hinzufügen, wie/etc/zsh/zprofile
zum Beispiel, oder Quelle/etc/profile
in/etc/zsh/zprofile
Datei.quelle
~/.zprofile
könnte besser sein als~/.zshrc
.Ich finde, dass es
.zshenv
schwierig ist , alles in eine Datei zu packen. Ich empfehle, oh-my-sh zu installieren und dann verschiedene Anpassungen (env vars, functions).oh-my-sh/custom/
als separate.zsh
Dateien in das Verzeichnis zu stellen .Ich entdeckte auch, dass dieser Ansatz einwandfrei funktioniert, wenn Sie in die Maschine ssh'ing, wenn Sie Umgebungsvariablen wie ändern
PATH
. Es funktioniert auch sehr gut zusammen mit vcsh, um Anpassungen gesichert und synchron zu halten.quelle
~/.ssh/config
Seitdem
JAVA_HOME
haben Sie bestätigt, dass diese Skripte automatisch bezogen werden, nicht wahr?Die einzige logische Erklärung ist, dass dies
PATH
später irgendwie festgelegt wird. Es sollte ursprünglich von PAM gesetzt werden, das liest/etc/environment
, und soweit ich weiß, passiert das, bevor/etc/profile.d/*.sh
Dateien bezogen werden. Möglicherweise funktioniert zsh in dieser Hinsicht anders als bash.quelle
Nach dem Ausführen von Updates ist dieses Problem nur lokal aufgetreten. Es sieht so aus, als ob Drush nicht weiß, wo er eine legitime Kopie von PHP findet, die pdo enthält. Glücklicherweise unterstützt es das Verstauen dieses Pfades in einer Umgebungsvariablen, so dass ich dies auf der Kommandozeile tat:
Das Problem wurde behoben, also habe ich .zshrc bearbeitet und der Datei hinzugefügt. Das Problem wurde behoben.
quelle
.zshrc
vor, dass dies verwendet wird, genau wie die Top-Antwort ?