Dies sind die Inhalte des Bestands ~/.profile
, der mit meinem 13.10 geliefert wurde (kommentierte Zeilen entfernt):
if [ -n "$BASH_VERSION" ]; then
if [ -f "$HOME/.bashrc" ]; then
. "$HOME/.bashrc"
fi
fi
if [ -d "$HOME/bin" ] ; then
PATH="$HOME/bin:$PATH"
fi
Dies ist von Debian geerbt, aber warum hat Canonical beschlossen, es zu behalten? Soweit ich weiß, ist dies nicht die Standardmethode von * nix und ich habe verschiedene Systeme gesehen, bei denen dies nicht der Fall war. Daher gehe ich davon aus, dass sie einen guten Grund dafür hatten. Dies kann zu unerwartetem Verhalten führen, wenn Anmelde-Shells ausgeführt werden (z. B. beim Einlesen in den Computer), von denen der Benutzer nicht erwartet hätte, dass sie ~/.bashrc
stammen.
Der einzige Vorteil, den ich mir vorstellen kann, ist, dass der Benutzer nicht mit vielen Startdateien verwechselt wird und diese .bashrc
unabhängig vom Shell-Typ alleine bearbeitet und gelesen werden können. Dies ist jedoch ein zweifelhafter Vorteil, da es oft nützlich ist, unterschiedliche Einstellungen für die Anmeldung und für interaktive Shells zu haben, was Sie daran hindert. Außerdem werden Anmelde-Shells häufig nicht in einer grafischen Umgebung ausgeführt. Dies kann je nach den Einstellungen in diesen Dateien zu Fehlern, Warnungen und Problemen führen (oh mein Gott!).
Warum macht Ubuntu das? Was vermisse ich?
-n "$BASH_VERSION"
sollte es außerhalb von Bash wahr sein?.profile
Source gibt.bashrc
, das ist nicht in allen Linux-Versionen der Fall und ich frage mich, was die Gründe dafür sind.Antworten:
Dies ist eine vorgelagerte Entscheidung von Debian. Die Gründe dafür werden in diesem sehr schönen Wiki-Beitrag erläutert , von dem der folgende ein Auszug ist. Die Zusammenfassung lautet "um sicherzustellen, dass GUI- und Nicht-GUI-Anmeldungen auf die gleiche Weise funktionieren":
quelle
Dies ist Ubuntus Standardverhalten. Es handelt sich um eine
~/.bashrc
Startdatei für jede interaktive Shell auf Benutzerebene. Wenn Sie ein Terminal öffnen, starten Sie im Grunde genommen eine nicht angemeldete, interaktive Shell, die liest~/.bashrc
und den Inhalt von~/.bashrc
bezieht und in Ihre aktuelle Shell-Umgebung exportiert. Es hilft einem, alle seine benutzerdefinierten Shell-Variablen und -Funktionen in der aktuellen Shell abzurufen. Auch Sie könnten Linien wie diese findenum benutzerdefinierte Aliase in der aktuellen Shell-Umgebung zu erhalten.
Dies ist wichtig, um auch eine gute Benutzererfahrung zu gewährleisten. Zum Beispiel einer Proxy - Berechtigungsnachweis in speichern könnte
.bashrc
, es sei denn , es keine von Terminal - Anwendungen stammt erhalten ( nämlich ,ping
,wget
,curl
,lynx
etc.) richtig funktionieren. Oder Sie müssen die Proxy-Anmeldeinformationen jedes Mal angeben, wenn Sie ein Terminal öffnen.Abgesehen davon, dass Ubuntus Standard
.bashrc
viele benutzerfreundliche Aliase (fürls
undgrep
zum Drucken von farbigen Ausgaben) enthält, gibt es viele neue Definitionen für verschiedene Shell-Variablen, die die Benutzererfahrung verbessern.Im Falle Ihres SSH-Logins oder eines Logins in der virtuellen Konsole erhalten Sie jedoch im Grunde genommen eine interaktive Login-Shell. Dort befindet sich die Shell-Initiierungsdatei
~/.profile
. Wenn Sie also keine Quelle~/.bashrc
angeben, verpassen Sie all diese hilfreichen Einstellungen in Ihrer.bashrc
. Deshalb Ubuntus~/.profile
Standardquelle~/.bashrc
Zu vermeidender Fall
~/.profile
Form innen~/.bashrc
zur gleichen Zeit , als~/.bashrc
von sourced wird~/.profile
. Es wird eine Endlosschleife der Situation erstellen und infolgedessen wird Ihre Terminal-Eingabeaufforderung angehalten, es sei denn, Sie drücken Ctrl+ C. In einer solchen Situation, wenn Sie eine Zeile in Ihre setzen~/.bashrc
Dann konnte man sehen, dass der Dateideskriptor stoppt, wenn Sie ein Terminal öffnen.
quelle
.profile
Sourcing ist.bashrc
? SuSe Enterprise 10 macht das nicht und auch keine der Fedora-Versionen, die ich verwendet habe, aber das war vor Jahren, ich kann mich irren. CentOS 5.8 funktioniert seltsamerweise. Wie auch immer, sehen Sie meinen Standpunkt? Dies ist eine Design-Wahl und ich frage mich, warum es gemacht wurde..bashrc
oder in.bash_aliases
. Zum Beispiel habe ich einen Alias fürls
wiels --color=auto
in meinem.bashrc
und wurde von meinem.bashrc
bezogen.profile
. Hier kann ich den Alias auch von ssh verwenden. Oder ich könnte Proxy in SSH-Sitzung verwenden. Wenn ich meine nicht mit der Quelle.bashrc
aus.profile
Ich löse diese Funktionen. Ich denke, es geht um eine bessere Benutzererfahrung..bashrc
behebt das. Aber es verursacht auch Probleme. Ich erinnere mich, dass ich beim ersten Mal, als ich ein System mit diesem Verhalten verwendete, diese seltsamen Meldungen immer wieder erhieltssh
, weil ichxset b off
in meinem.bashrc
System die Terminalklingel deaktivierte, aber nur in einem X-System gab Fehlermeldungen. Ich brauchte eine Ewigkeit, um herauszufinden, was los war, da ich nicht dachte, dass.bashrc
dies beim Ausführen einer Login-Shell gelesen werden würde. Ich frage mich nur, ob es eine "offizielle" Aussage dazu gibt.