Ich kenne den Unterschied zwischen den beiden Bash-Anmeldeskripten:
.bashrc
wird nur von "non-login" -Shells ausgeführt.
.bash_profile
(oder .bash_login
oder .profile
) wird von "Login" -Shells ausgeführt.
Hat jemand ein paar gute Beispiele für Dinge, die besser für die reine Login-Ausführung geeignet sind, so dass ich sie nur einfügen würde, sie .bash_profile
aber keinen Sinn ergeben würden .bashrc
?
(Ich weiß , die meisten von uns beziehen .bashrc
aus .bash_profile
, so es scheint nicht zu viel in der entgegengesetzten Frage zu sein ...)
Antworten:
Da a
.bashrc
für nicht angemeldete Shells gedacht ist, vermeide ich alle Befehle, die auf dem Bildschirm angezeigt werden. Ich habe auch Erfahrungen gemacht, bei denen echo-Anweisungen in.bashrc
dazu führen, dass sftp- und rsync-Befehle fehlschlagen (und möglicherweise auch scp-Befehle).Außerdem wird ssh-agent in der Regel nicht über eine nicht interaktive Shell ausgeführt. Also habe ich das in
.bash_profile
.quelle
.bashrc
, die die über Standard-Streams implementierten Remote-Dateitransfermethoden stören , besteht die Lösung darin, solche Befehle unter Code zu setzen, der prüft, ob die Shell interaktiv ist und nur fortgesetzt wird, wenn dies der Fall ist. Die Standarddateien der Benutzer.bashrc
in Ubuntu, die/etc/skel/.bashrc
bei der Kontoerstellung kopiert wurden , sowie die systemweite Datei/etc/bash.bashrc
enthalten bereits Code, der prüft und zurückgibt, ob die Shell nicht interaktiv ist (obwohl die Befehle, die die Ausgabe erzeugen, weiterhin unter diesen Befehlen abgelegt werden müssen).Byobu ist ein großartiges Beispiel für etwas, das Sie niemals in eine setzen sollten
.bashrc
.Andernfalls wird es rekursiv in jedem seiner virtuellen Terminals ausgeführt ;-)
Sie können es aber versuchen, es macht Spaß.
Das ist der Grund, warum Sie es
.profile
eingeben, damit byobu (das eigentlich nur ein Wrapper um den Bildschirm ist) nur einmal zum Zeitpunkt der Anmeldung geladen wird. Und byobu selbst kann neue interaktive Bash-Sessions starten.quelle