Sonntag, 18. November 2012
Wer seine Shell unter Mac OS X nach eigenem Gusto konfigurieren möchte, legt an eine oder mehrere der nachfolgenden Dateien Hand an — je nachdem, ob man Anpassungen systemweit (/etc/profile, /etc/bashrc) oder nur für den eigenen Benutzer eingerichtet haben möchte (~/.*; siehe unten).
Es muss dabei zwischen Login- und Non-Login-Shells unterscheiden werden. Was für einen Shell-Typ man gerade verwendet, findet sich ganz leicht mit folgendem Befehl heraus:
$ shopt | grep login_shell
login_shell on
Login-Shell
- /etc/profile
- Die erste existierende der folgenden Dateien (nur eine!):
- ~/.bash_profile
- ~/.bash_login
- ~/.login
Non-Login Shell
- /etc/bashrc
- ~/.bashrc
Quelle: What startup files are read by the shell? (shell configuration)
Soweit so gut … Die Sache wird nun aber noch weiter verkompliziert, indem man beim Login mit dem persönlichen Benutzer standardmässig eine bash-Shell vorgesetzt bekommt:
$ echo $SHELL
/bin/bash
Nachdem man aber mit sudo su zum root-Benutzer wechselt, hat man „nur“ noch eine sh-Shell:
# echo $SHELL
/bin/sh
Wie in einem SuperUser-Thread dargelegt handelt es sich bei /bin/sh seit Mac OS X 10.6 um ein bash-Binary, welches aber mit dem Flag -enable-strict-posix-default kompiliert wurde. Da sich aber /bin/sh wie ein Bourne Shell verhält, werden gar keine Konfigurationsdateien eingelesen:
Note that when bash is invoked with the name „sh“, it tries to mimic the startup sequence of the Bourne shell („sh“). In particular, a non-login shell invoked as „sh“ does not read any dot files by default. See the bash man page for details.
Quelle: What startup files are read by the shell? (shell configuration)
Fazit
Wer möchte, dass /etc/bashrc auch bei einem sudo su ausgeführt wird, muss die Login-Shell des root-Benutzers ändern:
# chsh -s /bin/bash root
Changing shell for root.
In den root-Benutzer wechselt man dann mittels
$ sudo -i