To pytanie ma już odpowiedź tutaj:
- Dlaczego .bashrc nie działa automatycznie? 13 odpowiedzi
Znalazłem wiele osób zastanawiających się, dlaczego instrukcje podobne do tego:
Put X to your ~/.bashrc and you can do Y
nie działa
Zawsze okazuje się, że pliki startowe bash Mac OS X (lub sama Bash Maca) nie źródło ~ / .bashrc, ani w powłoce logowania, ani w powłoce spawnowanej z systemu Windows - jak aplikacja Terminal w Mac OS X)
Dlaczego tak jest, skoro zrobiły to wszystkie inne systemy uniksowe z Bash, z którymi wcześniej pracowałem?
PS:
Znalazłem to, co sama Bash mówi o plikach startowych (co może być pomocne):
Gdy Bash jest wywoływany jako interaktywna powłoka logowania lub jako nieinteraktywna powłoka z opcją --login, najpierw czyta i wykonuje polecenia z pliku / etc / profile, jeśli plik ten istnieje. Po odczytaniu tego pliku szuka ~ / .bash_profile, ~ / .bash_login i ~ / .profile, w tej kolejności, i odczytuje i wykonuje polecenia z pierwszego, który istnieje i jest czytelny. Opcji --noprofile można użyć, gdy powłoka zostanie uruchomiona w celu zahamowania tego zachowania.
Źródło: http://www.gnu.org/software/bash/manual/bashref.html#Bash-Startup-Files
źródło
~/.bash_profile
jest wykonywany, ale nie~/.bashrc
. Wierd.Odpowiedzi:
W OSX terminal domyślnie rozpoczyna sesję logowania, więc czyta plik .bash_profile itp. (Proces logowania GUI, który pyta o twoje imię i hasło, nie używa skryptów powłoki i nie uruchamia powłoki, wszystko jest wykonywane od uruchomienia i obszaru roboczego)
Na innych Uniksach xterm domyślnie uruchamia powłokę bez logowania, więc czytają .bashrc, ponieważ skrypty, które przedstawiają twoje hasło itp. Podczas logowania, wywołują sesję logowania, a wszystkie terminale są podprocesami tego i dziedziczą środowisko powłoki.
Z dokumentu GNU, o którym wspominałeś
źródło
bash
czyta tylko.bashrc
dla non-login muszli:Ponieważ Terminal zaczyna się
bash
jako powłoka logowania (uruchom,w
aby zobaczyć, żebash
instancje są wykonywane jako-bash
),.bashrc
nigdy nie jest odczytywany automatycznie.źródło