W Linuksie i, o ile mi wiadomo, we wszystkich systemach uniksowych emulatory terminali domyślnie uruchamiają interaktywne powłoki bez logowania. Oznacza to, że dla basha uruchomiona powłoka:
Po uruchomieniu interaktywnej powłoki, która nie jest powłoką logowania, bash czyta i wykonuje polecenia z
/etc/bash.bashrc
oraz~/.bashrc
, jeśli te pliki istnieją. Można temu zapobiec, używając tej--norc
opcji.Opcja
--rcfile
pliku zmusi bash do odczytu i wykonywania poleceń z pliku zamiast/etc/bash.bashrc
i~/.bashrc
.
A w przypadku powłok logowania:
Kiedy bash jest wywoływany jako interaktywna powłoka logowania lub jako nieinteraktywna powłoka z
--login
opcją, najpierw czyta i wykonuje polecenia z pliku/etc/profile
, jeśli plik istnieje. Po przeczytaniu tego pliku, szuka~/.bash_profile
,~/.bash_login
i~/.profile
, w tej kolejności, a odczytuje i wykonuje polecenia z pierwszego, który istnieje i jest czytelny.
--noprofile
Opcja może być stosowany, gdy powłoka jest uruchamiany w celu zahamowania tego zachowania.
Na OSX, jednak domyślna powłoka (co jest bash) rozpoczęła się w terminalu domyślnej (Terminal.app) faktycznie źródeł ~/.bash_profile
lub ~.profile
itd. Innymi słowy, to działa jak powłoki logowania.
Główne pytanie : Dlaczego domyślna powłoka interaktywna jest powłoką logowania w OSX? Dlaczego OSX zdecydował się to zrobić? Oznacza to, że wszystkie instrukcje / samouczki dotyczące rzeczy opartych na powłoce, które wspominają o zmianie rzeczy ~/.bashrc
, nie powiodą się w OSX lub odwrotnie ~/.profile
. Mimo to, podczas gdy wiele zarzutów można wyrównać w Apple, zatrudnianie niekompetentnych lub idiotycznych deweloperów nie jest jednym z nich. Przypuszczalnie mieli ku temu dobry powód, więc dlaczego?
Podpytania: Czy Terminal.app faktycznie uruchamia interaktywną powłokę logowania lub czy zmieniły zachowanie bash? Czy jest to specyficzne dla Terminal.app czy jest niezależne od emulatora terminala?