.bashrc wird beim Öffnen eines neuen Terminals nicht ausgeführt

84

Der Code in .bashrc wird nicht ausgeführt, wenn ich in Ubuntu 12.04 ein neues Terminalfenster öffne. Das ist mir beim Erstellen einer .bash_aliases-Datei aufgefallen. Die Aliase wurden nicht angezeigt, als ich ein neues Terminal öffnete. Jedoch, wenn ich tippe, sind source .bashrcdie Aliase aufgetaucht.

.bashrc sollte jedes Mal ausgeführt werden, wenn ich ein neues Terminalfenster öffne, oder?

Wie mache ich das?

Sela
quelle
Versuchen Sie stattdessen .profile.
jippie
4
@jippie Nein, .profilewird beim Anmelden gelesen, nicht beim Öffnen eines neuen Terminals, es sei denn, irgendwo liegt eine Fehlkonfiguration vor. Selah: hast du etwas an der Standardkonfiguration geändert? Führen Sie bitte ps -o command $$ $PPIDein Terminal aus und kopieren Sie die Ausgabe.
Gilles
1
Nur um sicherzugehen, dass Sie sich .bashrcin Ihrem Home-Ordner befinden, oder?
Jjed
Vielleicht möchten Sie das überprüfen echo $SHELL. Dies ist mir passiert und die Shell war / bin / sh statt bash. Repariere es in / etc / passwd und starte .bashrc.
Joe Flynn

Antworten:

128

Es muss nicht unbedingt laufen. An der Spitze der standard .bashrc steht dieser Kommentar:

# ~/.bashrc: executed by bash(1) for non-login shells.
# see /usr/share/doc/bash/examples/startup-files (in the package bash-doc)
# for examples

Ich glaube, es gibt eine Option, um das Bash-Terminal als Login-Shell auszuführen oder nicht. Unter Ubuntu wird gnome-terminal normalerweise nicht als Anmeldeshell ausgeführt, daher sollte .bashrc direkt ausgeführt werden.

Bei Anmelde-Shells (wie den virtuellen Terminals) wird die Datei normalerweise ~/.profileausgeführt, es sei denn, Sie haben eines ~/.bash_profileoder ~/.bash_login, diese sind jedoch standardmäßig nicht vorhanden. Standardmäßig verwendet Ubuntu nur .profile.

Der Standard ~/.profileenthält Folgendes:

if [ -n "$BASH_VERSION" ]; then
    # include .bashrc if it exists
    if [ -f "$HOME/.bashrc" ]; then
        . "$HOME/.bashrc"
    fi
fi

Dies führt .bashrc aus, wenn es verfügbar ist - vorausgesetzt, $ BASH_VERSION ist in Ihrer Umgebung vorhanden. Sie können dies überprüfen, indem Sie den Befehl echo $BASH_VERSIONeingeben. Er sollte einige Informationen zur Versionsnummer enthalten und nicht leer sein.

Marty Fried
quelle
4
Nachdem ich diese Anweisungen verstanden hatte, ging ich in meiner Terminalanwendung zu Bearbeiten -> Profileinstellungen -> Titel und Befehl -> Befehl als Anmeldeshell ausführen. Ich habe das deaktiviert. Danke für die Hilfe.
Selah
Können Sie klären, wann .profile (daher .bashrc) geladen / gelesen wird? Es scheint, dass dies getan wird, wenn sich die Benutzer bei ihrer Desktopsitzung anmelden. Die Antwort legt nahe, dass dies auftritt, wenn Sie eine neue Terminal / Shell-Sitzung starten. "Bei Login-Shells (wie den virtuellen Terminals) wird normalerweise die Datei ~ / .profile ausgeführt ..."
Hedgehog
4
Es wird normalerweise ausgeführt, wenn Sie eine neue Anmeldeshell starten (keine echte Desktopsitzung, da Sie eine neue Anmeldeshell über die Desktopsitzung ausführen können). Wie gesagt, es wird standardmäßig ausgeführt, aber nicht, wenn Sie ~/.bash_profileoder erstellt haben ~/.bash_login. Sie können testen, indem Sie das Kontrollkästchen aktivieren oder deaktivieren Edit -> Profile Preferences -> Title and Command -> "Run command as a login shellund das Terminal beenden und dann erneut ausführen. Du könntest etwas von .profile nachmachen, um es zu testen.
Marty Fried
@Selah Dein Kommentar hat mir mehr geholfen als die eigentliche Antwort;) Vielen Dank für den Kommentar!
Aleks
Wenn Sie also ~/.bash_profileoder ~/.bash_loginauf Ihrem System erstellt haben und diese behalten möchten, aber dennoch ausführen möchten ~/.profileund von dort ~/.bashrcausgeführt werden, können Sie sie von Ihrem eigenen ~/.bash_profileoder ~/.bash_loginmit einer Zeile, die enthält, beziehen source "$HOME/.profile". Gibt Ihnen die farbige Ausgabe von ls auch in Login-Shells zurück!
Tanius
26

In meinem Fall .bashrcfehlten einfach die Ladezeilen.bash_profile

# include .bashrc if it exists
if [ -f "$HOME/.bashrc" ]; then
    . "$HOME/.bashrc"
fi

Ich habe es manuell hinzugefügt und es hat mit meinem neuen Login funktioniert

user3584014
quelle
3
.bash_profile? Ubuntu verwendet .profilestandardmäßig ein, nicht .bash_profile.
muru
Der Ubuntu-Server übernimmt häufig nicht das .bashrc-Format. Dies funktioniert auch, wenn ... cat .bash_profile [[-s "$ HOME / .bashrc"]] && source "$ HOME / .bashrc" # Standard laden
Scott Stensland
Das hat es für mich gelöst! Ich habe hinzugefügt pcreund es scheint, als ob es das Bash-Profil überschrieb, anstatt es hinzuzufügen.
Shapiro Yaacov
7

.bash_profileEnthält die Konfiguration für die Bash-Shell. Wenn Sie ein Terminal öffnen, liest es zuerst Befehle und führt sie aus ~/.bash_profile. Sie können also Folgendes hinzufügen, .bash_profileum die Shell gemäß bashrc einzurichten.

. ~/.bashrc
SD.
quelle
Sofern auf Ihrem Terminal keine Anmeldeshell ausgeführt wird (was in Ubuntu standardmäßig ~/.bash_profilenicht der Fall ist ), wird diese nicht gelesen (und in Ubuntu standardmäßig nicht vorhanden)
muru
5

Wenn dies $BASH_VERSIONnicht festgelegt ist, verwenden Sie den chshBefehl, um Ihre Shell auf festzulegen /bin/bash.

Ich hatte ein ähnliches Problem mit 12.04 LTS und es stellte sich heraus, dass für das neue Benutzerkonto die Standard-Shell eingestellt war /bin/sh, was die Ursache des Problems war.

evan_b
quelle
Das war der Grund!
Mulya
1

Entspricht dem Kommentar in .profile

~ / .profile: Wird vom Befehlsinterpreter für Login-Shells ausgeführt. 11 Diese Datei wird von bash (1) nicht gelesen, wenn ~ / .bash_profile oder ~ / .bash_login 10 # vorhanden ist

Also los, wenn ~/.bash_profileoder ~/.bash_login exists, werden diese ausgeführt anstatt~/.profile

wenn Sie ausführen möchten , ~/.bashrcfügen Sie einfach die Zeile source ~/.bashrcinbash_profile

Nic Wanavit
quelle
1
Ich habe genau das gleiche Problem erlebt. Meine .bashrcwurde bezogen, bis ich eine .bash_profileDatei erstellt habe. Also habe ich source ~/.bashrc meiner .bash_profileDatei eine Zeile vorangestellt .
Lashae
0

Anstatt das alles Edit -> Profile Preferences -> Title and Command -> "Run a custom command instead of my shell"durchzugehen, schreiben bashund schließen Sie es einfach in das benutzerdefinierte Befehlsfeld . Wenn Sie das Terminal das nächste Mal öffnen, wird es auch automatisch ausgeführt.

Furqan Ali
quelle
Auf welche GUI beziehen Sie sich? Gnom oder Einheit
Nic Wanavit