it-swarm.com.de

/ etc / profile wird nicht bezogen

Für den 11.04 habe ich eine Neuinstallation meines Systems durchgeführt. Ein Teil dieser Installation war die Installation von rvm , das einen rvm.sh in /etc/profile.d/ schreibt. Dies funktioniert nicht, da /etc/profile (das jedes + r in /etc/profile.d/*.sh lädt) nicht geladen wird. Laut Dokumentation wird das Profil nur bezogen, wenn Bash in Login ausgeführt wird. Um dies zu überprüfen, habe ich bash --login aufgerufen, wonach rvm verfügbar war.

Dies hat bei mir in früheren Versionen von Ubuntu ohne Konfiguration funktioniert. Das heißt, bei einer Neuinstallation von 10.10 wird profile/.d korrekt als Quelle verwendet.

Meine Frage ist: Gibt es etwas, was ich falsch mache, oder gibt es neue Annahmen in Natty, die dies gebrochen haben? Meine aktuelle Problemumgehung besteht darin, source /etc/profile in ~/.bashrc (was schrecklich ist, da das Profil vor bashrcs laden soll, aber das tut Trick).

44
Marc

Standardmäßig startet gnome-terminal bash nicht als Login-Shell (ich nehme an, Sie meinen, bash wurde in einem gnome-terminal gestartet). Das bedeutet, dass Bash weder /etc/profile noch ~/.profile liest. Wie Sie richtig gesehen haben, liest bash diese Dateien, wenn es als Login-Shell gestartet wird.

Die schnelle Lösung für Ihr Problem besteht darin, gnome-terminal so zu konfigurieren, dass bash als Anmeldeshell gestartet wird, sodass /etc/profile angezeigt wird. Dazu müssen Sie "Befehl als Anmeldeshell ausführen" im Gnome-Terminal "Profileinstellungen" aktivieren, das über das Menü "Bearbeiten" erreichbar ist.

Ich empfehle dies nicht, weil es die Unterscheidung zwischen ~/.profile und ~/.bashrc durcheinander bringt. Im Idealfall sollte ~/.profile Dinge tun, die nur einmal beim Anmelden erforderlich sind, während ~/.bashrc Dinge tun sollte, die bei jedem Start von bash erforderlich sind.

Es gibt ein Frage und Antwort beim Superuser über den Unterschied zwischen bashrc und profile . Lesen Sie dort für weitere Informationen.

Aus Ihrer Problembeschreibung geht hervor, dass das rvm-Skript beim Anmelden nur einmal geladen werden muss. Soweit ich weiß, hat Ubuntu das grafische Login so konfiguriert, dass es /etc/profile/ und ~/.profile liest. Das heißt, nach dem Abmelden und einem einmaligen Anmelden sollte das rvm-Skript aktiv sein. Wenn es immer noch nicht funktioniert, muss das rvm-Skript möglicherweise für jede Bash-Sitzung geladen werden. Wenn dies der Fall ist, ist bashrc der geeignetere Ort für das Skript.

51
lesmana

Es gibt jedoch eine Datei /etc/bash.bashrc, die vom Gnome-Terminal gelesen wird und die "systemweite .bashrc-Datei für interaktive bash (1) -Shells" ist.

Mein Aufruf der rvm-Funktion, [[ -s "$HOME/.rvm/scripts/rvm" ]] && . "$HOME/.rvm/scripts/rvm", ging dort ein und funktioniert einwandfrei für die beiden Benutzer auf diesem System.

5
Dmitri

Für die Installation von RVM als Mehrbenutzer muss der Benutzer den folgenden Befehl ausführen:

(weil Ubuntu bei der Anmeldung nicht /etc/profile.d bezieht)

echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bashrc
4
user50486

Ich habe eigentlich für diejenigen, die ihre Boxen nicht vollständig neu starten möchten, folgendes gefunden, es sei denn, es ist unbedingt erforderlich ...

Sie müssen nicht den gesamten Computer neu starten, damit die Änderungen an /etc/profile wirksam werden. Sie müssen lediglich die XWindows Desktop-GUI neu starten, damit die Konfigurationsdaten erneut gelesen werden (so als ob sie im Rahmen eines systemweiten Neustarts gestartet würden).

Für mich verwende ich xUbuntu, das LightDM verwendet, aber Sie können in jeder ausführbaren Datei Ihren aktuellen Desktop eintragen.

Erstens können Sie keinen Terminal-Emulator innerhalb der Desktop-GUI selbst verwenden, um dies zu tun (zumindest nicht bei LightDM). Sie müssen entweder SSH oder eine sekundäre Konsole verwenden (wenn Sie Strg + Alt gedrückt halten und eine F-Taste oder eine Zifferntaste drücken Sie sollten sich von Ihrem grafischen Desktop-Login oder Bildschirm zu einem einfachen Terminal-Fenster zurückziehen. Ich schlage auch vor, dass Sie Remotedesktop-Objekte wie VNC schließen, wenn Sie SSH verwenden (SSH kann natürlich verbunden sein, Sie möchten jedoch nicht, dass ein offenes VNC-Fenster die Anzeige 0 abruft, während es versucht, neu zu starten, da dies den Neustart möglicherweise zum Erliegen bringt Es wartet darauf, dass Sie die VNC-Sitzung beenden.

Ich mache das die ganze Zeit mit SSH und es ist ein großer Lebensretter, besonders wenn Sie nicht physisch an Ihrem Computer sind und nicht auf einen vollständigen Neustart warten und die Verbindung wiederherstellen möchten :-D

Jetzt der einfache Teil einmal in einem "sekundären" Terminal oder SSH-Problem: Ja, dies wird Ihre aktuelle Sitzung beenden, stellen Sie sicher, dass Sie nichts dagegen haben, speichern Sie alle offenen Dokumente oder Arbeiten

Sudo service lightdm restart

warten Sie eine Minute, bis der Desktop beendet und wieder gestartet wird (dies kann einige Sekunden dauern, da die Dinge angehalten und beim Start erneut ausgeführt werden).

Das war's. Wenn Sie jetzt entweder zu Konsole 0 zurückkehren oder VNC zum Herstellen einer Verbindung verwenden, werden Sie von der Anmeldeaufforderung und der normalen Anmeldung begrüßt. Wenn Sie einen Terminalemulator öffnen und Ihren Befehl eingeben, sollten Sie dies jetzt tun Ich habe keine Probleme, da alles neu bezogen wurde, als ob Sie einen vollständigen Neustart der Maschine durchgeführt hätten.

Denken Sie daran, wenn Sie Sudo service lightdm restart [oder stop, start aus der Desktop-Umgebung heraus mit einem Terminal-Emulator ausgeben, bleibt der Befehl einfach hängen und es scheint nichts zu passieren . Dies liegt daran, dass Sie derzeit die Konsole (aka display) 0 verwenden und sie daher nicht vollständig herunter- und wieder hochfahren kann, da sie darauf wartet, dass der Desktop nicht verwendet wird, bevor der Befehl ausgeführt wird.

Letzte Anmerkung: Ich habe nicht versucht, einen Neustart der Umgebung über den Desktop in einem Terminalemulator durchzuführen und dann zu einer anderen Konsole zu wechseln, die möglicherweise neu gestartet wird. Wenn Sie die Konsole jedoch bereits wechseln möchten, führen Sie den Befehl aus von dort aus sollte es sowieso sein?

0
Pariah

wenn Sie ZSH oder OH-MY-ZSH haben, lautet Ihr Profil / etc/zprofile

0
Hadi Farnoud