Unter Linux und meines Wissens auf allen Unix-Systemen führen Terminalemulatoren standardmäßig interaktive Shells ohne Anmeldung aus. Dies bedeutet, dass die gestartete Shell für bash:
Wenn eine interaktive Shell gestartet wird, die keine Anmeldeshell ist, liest bash Befehle aus
/etc/bash.bashrc
und führt sie aus~/.bashrc
, sofern diese Dateien vorhanden sind. Dies kann durch Verwendung der--norc
Option verhindert werden.Die
--rcfile
Dateioption erzwingt, dass Bash anstelle von/etc/bash.bashrc
und Befehle aus der Datei liest und ausführt~/.bashrc
.
Und für Login-Shells:
Wenn bash als interaktive Anmeldeshell oder als nicht interaktive Shell mit der
--login
Option aufgerufen wird , werden zuerst Befehle aus der Datei gelesen und ausgeführt/etc/profile
, sofern diese Datei vorhanden ist. Nachdem die Datei zu lesen, sucht er nach~/.bash_profile
,~/.bash_login
und~/.profile
in dieser Reihenfolge, und liest und die Befehle ausführt , von der ersten , die lesbar existiert und ist.Die
--noprofile
Option kann verwendet werden, wenn die Shell gestartet wird, um dieses Verhalten zu unterbinden.
Auf OSX, aber die Standard - Shell in dem Standardanschluss (Terminal.app) tatsächlich Quellen gestartet (die bash) ~/.bash_profile
oder ~.profile
usw. Mit anderen Worten, wirkt es wie ein Login - Shell.
Hauptfrage : Warum ist die standardmäßige interaktive Shell eine Anmeldeshell unter OSX? Warum hat sich OSX dafür entschieden? Dies bedeutet, dass alle Anweisungen / Tutorials für Shell-basierte Dinge, in denen das Ändern von Dingen erwähnt ~/.bashrc
wird, unter OSX fehlschlagen oder umgekehrt ~/.profile
. Obwohl viele Vorwürfe gegen Apple erhoben werden können, gehört die Einstellung von inkompetenten oder idiotischen Entwicklern nicht dazu. Vermutlich hatten sie einen guten Grund dafür, also warum?
Unterfragen: Führt Terminal.app tatsächlich eine interaktive Anmeldeshell aus oder haben sie das Verhalten von bash geändert? Ist dies spezifisch für Terminal.app oder unabhängig vom Terminalemulator?