Was passiert genau, wenn ich unter Mac OSX in der Terminal-Befehlszeile 'bash' eingebe?

7

Ich habe einen Alias, den ich zu .bashrc hinzugefügt habe, und er wird erst im Terminal aktiviert, nachdem ich den Befehl 'bash' ausgeführt habe. Ich habe das Gefühl, ich sollte wissen, was hier passiert, aber ich weiß es nicht. :) :)

Chris Shattuck
quelle
2
Wenn Ihre Standard-Shell nicht bash ist, wird bash erst ausgeführt, wenn Sie es explizit mit dem Befehl 'bash' ausführen. Dies würde zu dem Verhalten führen, das Sie zu erleben scheinen.
Slartibartfast

Antworten:

2

Abhängig von der Version von OS X, die Sie verwenden, ist Ihre Standard-Shell möglicherweise nicht bash. Sie können dies überprüfen, indem Sie Folgendes eingeben (bevor Sie 'bash' ausführen):

$ echo $SHELL
/bin/zsh

Sie können Ihre Standard-Shell in bash ändern, damit Sie den Befehl nicht weiter ausführen müssen, indem Sie die folgenden Anweisungen befolgen:

/server/21044/how-do-i-change-a-users-default-shell-in-osx

Von @ chopper3

für <= 10.4 - netinfo manager, / users / whoever / shell

für 10.5 => - SysPrefs, Konten, bei gedrückter Ctrl-Taste auf Benutzer klicken, erweiterte Optionen auswählen, Anmelde-Shell-Feld bearbeiten.

Um Ihre Frage weiter zu beantworten, wird .bashrc nur von der Bash-Shell verwendet. Wenn Sie möchten, können Sie herausfinden, welche Shell Sie verwenden, und den Alias ​​zu .tcshrc oder .zshrc hinzufügen, anstatt alles zu ändern, um bash zu verwenden.

Weitere Informationen darüber, was eine Shell ist:

http://en.wikipedia.org/wiki/Shell_(computing)

und speziell schlagen:

http://en.wikipedia.org/wiki/Bash_(Unix_shell)

Polynom
quelle
6

Von man bash:

Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest bash Befehle von und führt sie aus ~/.bashrc, sofern diese Datei vorhanden ist.

Hervorhebung von mir

Unter OS X werden in allen Terminalfenstern und Registerkarten Anmeldeshells ausgeführt. Dies entspricht der Ausführung bash --loginanstelle von bash. ~/.bashrcwird daher ignoriert, es sei denn, explizit sourced von z ~/.bash_profile.

Wenn bash als interaktive Anmeldeshell aufgerufen wird, [...] liest es zuerst Befehle aus der Datei und führt sie aus /etc/profile, falls diese Datei vorhanden ist. Nachdem die Datei zu lesen, sucht er nach ~/.bash_profile, ~/.bash_loginund ~/.profilein dieser Reihenfolge, und liest und die Befehle ausführt , von der ersten , die lesbar existiert und ist.

Erstellen ~/.bash_profileSie einfach, wenn es nicht vorhanden ist, und fügen Sie die folgende Zeile hinzu:

. .bashrc

Dann .bashrcwird auch für Anmeldesitzungen geladen.

Daniel Beck
quelle
1

Der Alias ​​funktioniert nach dem Ausführen nicht bash- er funktioniert während des Ausführens bash.

Grundsätzlich ~/.bashrchandelt es sich um eine Datei, die Anweisungen enthält, die bei bashjedem Start ausgeführt werden. Die Standard-Shell für alle neueren Versionen von Mac OS X lautet bash, sodass sie jedes Mal ausgeführt wird, wenn Sie ein Terminal öffnen. bashweiß jedoch nicht auf magische Weise, dass die Konfigurationsdateien beim Bearbeiten erneut gelesen werden müssen, sodass der Alias ​​beim Hinzufügen nicht sofort funktioniert ~/.bashrc. Was Sie tun , wenn Sie laufen bashin Ihre bestehende Schale ist eine andere Instanz erstellen bash(das wird die geänderte Konfigurationsdatei lesen, weil es beginnt nach oben). Beachten Sie, dass Ihre ursprüngliche Instanz von bashnoch vorhanden ist und hinter der bashmanuell ausgeführten Instanz ausgeführt wird . Wenn Sie die Shell schließen (mit demexit Befehl) kehren Sie zu Ihrer ursprünglichen Shell zurück (wenn Sie sie schließen, erhalten Sie vom Terminal die Meldung "Prozess abgeschlossen").

Um auf Ihr Problem zurückzukommen: Ihr Alias ​​funktioniert erst, wenn bashdie Konfiguration erneut gelesen wurde. Sie können dies tun, indem Sie basherneut starten (entweder indem Sie eine andere Shell in Ihrer vorhandenen Shell erstellen, indem Sie sie ausführen bash, oder indem Sie Ihr Terminal schließen und öffnen) oder den sourceBefehl verwenden, um basheine Datei erneut zu lesen. Also, nachdem Sie bearbeitet haben ~/.bashrc, funktioniert der source ~/.bashrcAlias, kein erneutes Starten bash.

Scott
quelle
.bashrcwird nicht jedes Mal gelesen, wenn bash gestartet wird.
Daniel Beck