.bash_profile oder .bashrc für Shell in Emacs?

11

Ich habe einen Alias ​​für einen riesigen Befehl geschrieben und ihn gespeichert. .bash_profileZu meiner Überraschung hat Emacs den Alias, in den ich geschrieben habe, nicht übernommen .bash_profile. Nach einigem Suchen im Internet habe ich .bashrcmit dem Befehl alias eine Datei in meinem $ HOME erstellt und erst danach hat emacs den Alias ​​abgerufen. Ich bin verwirrt, weil terminal.app einen Alias ​​von nimmt .bash_profile, emacs jedoch nur einen Alias .bashrc.

Ich lief M-x shellund ich bin auf macOS. Kann mir jemand erklären, wie die Beziehung zu Emacs und .bashrc& ist .bash_profile.

Genauer gesagt, wie kann ich Emacs dazu bringen, meine .bash_profilezusätzlich zu lesen .bashrc?

Chakravarthy Raghunandan
quelle
1
Wie haben Sie Emacs dazu gebracht, Ihre .bashrcAliase aufzunehmen? Ich frage dies, weil meine Emacs (und anscheinend die anderer) dies nicht standardmäßig tun.
Arch Stanton
@ArchStanton siehe @Vera Johanna Antwort auf diese Frage. Das ist die gleiche Methode, die ich verwendet habe. Obwohl ich jetzt zshanstelle von Bash benutze :)
Chakravarthy Raghunandan

Antworten:

14

Dies ist das richtige Verhalten. .bash_profileist für sogenannte Login-Shells. Zum Beispiel, wenn Sie sich im Textmodus an Ihrem Computer anmelden oder in einem Terminalemulator über sshoder telnetoder ...

.bashrcist für Nicht-Login-Shells gedacht, z. B. wenn Sie bereits angemeldet sind und ein neues xterm starten, oder in diesem Fall für den Emacs- shellModus.

Normalerweise .bash_profileenthält das auch Befehle zum Einlesen in .bashrc:

if [ -f ~/.bashrc ]; then
    . ~/.bashrc
fi

Das .bashrcwird also bei jedem Start gelesen.


Aliase gehören also dazu .bashrc; Es ist auch üblich, ein separates zu erstellen .bash_aliasesund es .bashrcüber dasselbe Konstrukt aufzunehmen:

if [ -f ~/.bash_aliases ]; then
    . ~/.bash_aliases
fi
Vera Johanna
quelle
11

Zusätzlich zu den von @pingi gemachten Punkten können Sie auch eine separate Konfigurationsdatei verwenden, die nur für die emacs-Shell geladen wird ( M-x shell):

Von der Handbuchseite (emacs) Interactive Shell :

Emacs sendet der neuen Shell den Inhalt der Datei '~ / .emacs_SHELLNAME' als Eingabe, falls vorhanden, wobei SHELLNAME der Name der Datei ist, aus der die Shell geladen wurde. Wenn Sie beispielsweise bash verwenden, lautet die an ihn gesendete Datei '~ / .emacs_bash'. Wenn diese Datei nicht gefunden wird, versucht Emacs es mit '~ / .emacs.d / init_SHELLNAME.sh'.

Dies ist nützlich, wenn Sie in Emacs ein anderes Shell-Eingabeaufforderungsformat verwenden oder Funktionen zum Übergeben von Dateien an emacsclient definieren möchten.

Tyler
quelle