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.bashrcund führt sie aus~/.bashrc, sofern diese Dateien vorhanden sind. Dies kann durch Verwendung der--norcOption verhindert werden.Die
--rcfileDateioption erzwingt, dass Bash anstelle von/etc/bash.bashrcund 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
--loginOption 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_loginund~/.profilein dieser Reihenfolge, und liest und die Befehle ausführt , von der ersten , die lesbar existiert und ist.Die
--noprofileOption 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_profileoder ~.profileusw. 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 ~/.bashrcwird, 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?