Ist es möglich herauszufinden, welche Dateien Umgebungsvariablen setzen / hinzufügen und in welcher Reihenfolge sie Vorrang haben?


9

Einige meiner Umgebungsvariablen ( $PATH, $MANPATHund Freunde) teilweise in verschiedenen Quelldateien.

Ich wünsche mir einen Befehl oder eine Methode, um schnell zu erfassen, welcher Teil in einer bestimmten Umgebungsvariablen aus welcher Datei stammt .

My $ PATH, zum Beispiel, hat offensichtlich gewesen Satz (hinzugefügt) in .bashrc, /etc/paths, /etc/paths.d/X11... und ich bin immer noch für die letzte mysteriöse Datei suchen , die überflüssigerweise eine Duplikat Pfaddefinition in meinem erstellt $PATH.

Es dauert eine Weile, die Dateien, die zu Umgebungsvariablen beitragen, manuell zu lokalisieren. Es muss einen nützlichen Weg geben, um diese unnötige Arbeit der Rückverfolgung aller Setter zu umgehen… oder bin ich der einzige, der in diese Richtung denkt?

Antworten:


6

In der Regel PATHwird das Programm, das Sie anmeldet (dies pam_envist ein häufiger Beitrag), in stark systemabhängiger Weise auf einen Anfangswert festgelegt. Anschließend ändern /etc/profileund ~/.profileund die darin enthaltenen Dateien diesen Wert.

Entfernen Sie alle Änderungen an PATHin .bashrc, Umgebungseinstellungen gehören nicht dazu .bashrc: siehe Unterschied zwischen .bashrc und .bash_profile .

Versuchen Sie zunächst, sich im Textmodus (z. B. mit ssh localhost) anzumelden, da der Sitzungsstart viel einfacher ist als im Grafikmodus.

Setzen Sie set -xam Anfang /etc/profileund ~/.profile. Die Shell druckt eine Ablaufverfolgung ihrer Standardfehlerströme. Suchen Sie PATHim Trace nach Zuordnungen zu .

Es gibt keine Vorstellung von Vorrang vor Zuweisungen von Umgebungsvariablen: Wer zuletzt zuweist, gewinnt.


6

Ihr PATH kann überall festgelegt werden, nicht nur in Ihrer .bashrc-Datei. Wahrscheinlich hat das System eine Datei, /etc/profileund / oder /etc/profile.localdie setzt einen Standardpfad für alle Benutzer auf dem System. Benutzerspezifische Änderungen oder Ergänzungen werden möglicherweise in Ihrer .profileDatei festgelegt, wenn sie nicht in Ihrer Datei enthalten sind .bashrc, oder Sie verwenden möglicherweise nur die Standardeinstellung auf Ihrem System.

Wenn Sie Änderungen vornehmen möchten, die nur Sie betreffen, würde ich sie .profilemithilfe des folgenden Formulars in Ihr Formular einfügen:

export PATH=/new/directory:$PATH

Dadurch wird der aktuelle Pfad bearbeitet, anstatt ihn vollständig neu zu schreiben.

Der Abschnitt "INVOCATION" von man bash(oder hier ) erklärt den Unterschied zwischen .profileund .bashrcusw. und welche anderen Dateien und in welcher Reihenfolge gelesen und gelesen werden, wenn Sie sich anmelden oder eine Shell starten.


1

Es ist sehr unwahrscheinlich, dass ein Mechanismus dafür existiert. Denken Sie nur daran, wie viele Möglichkeiten es gibt, den Wert einer env-Variablen in der Shell zu ändern.

Vielleicht haben Sie etwas Glück damit set -x.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.