Dlaczego Mac OS X nie pobiera ~ / .bashrc? [duplikować]


95

To pytanie ma już odpowiedź tutaj:

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


Zauważyłem również, że ~/.bash_profilejest wykonywany, ale nie ~/.bashrc. Wierd.
— igaurav,

Odpowiedzi:


90

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ś

Wywoływany jako interaktywna powłoka niezalogowana

Po uruchomieniu interaktywnej powłoki, która nie jest powłoką logowania, Bash czyta i wykonuje polecenia z ~ / .bashrc, jeśli plik istnieje. Można temu zapobiec, używając opcji --norc. Opcja --rcfile pliku zmusi Bash do odczytu i wykonywania poleceń z pliku zamiast ~ / .bashrc.

Zwykle plik ~ / .bash_profile zawiera wiersz

if [ -f ~/.bashrc ]; then . ~/.bashrc; fi 

po (lub przed) inicjalizacjach związanych z logowaniem.


7
Unicies = Uniksy?
— Paul Brewczynski

8
No cóż, chodziło mi o
— jednorożce

8
... i trzecia forma „Unixen” (chociaż wolę Unices)
— kamera na uchu

7
i czwarte „Jednorożce” ...
— zadzwoń

8
nie zapominajmy o zerowej formie, tj. „eunuchowie”
— smatthewenglish 11.01.17

19

bashczyta tylko .bashrcdla non-login muszli:

Po uruchomieniu interaktywnej powłoki, która nie jest powłoką logowania, bash czyta i wykonuje polecenia z ~ / .bashrc, jeśli plik istnieje. Można temu zapobiec, używając opcji --norc. Opcja --rcfile pliku zmusi bash do odczytu i wykonywania poleceń z pliku zamiast ~ / .bashrc.

Ponieważ Terminal zaczyna się bashjako powłoka logowania (uruchom, waby zobaczyć, że bashinstancje są wykonywane jako -bash), .bashrcnigdy nie jest odczytywany automatycznie.


Chodzi o to, że aplikacja Termina na Mac OS X zawsze tworzy instancję „bash” logowania? Dlaczego ? Jeśli naprawdę się nie zalogujesz. (Masz login wcześniej z GUI)
— Paul Brewczynski

Dlaczego inne systemy uniksowe czytają ~ / .bashrc?
— Paul Brewczynski

3
Nikt tutaj nie jest w stanie wyjaśnić decyzji projektowych podjętych przez Apple. Mógłbym z łatwością dyskutować obie strony, ale to też nie pomaga. Więc po prostu zaakceptuj to, ponieważ jest to prawdopodobnie najlepsza opcja
— nohillside

Cóż, to pierwszy raz, kiedy uruchamiasz powłokę tak, aby była to login. W Uniksach opartych na X11 zaczynasz od uruchomienia powłoki, która następnie uruchamia X, więc nie jest to login
— 151019

@PaulBrewczynski Cóż, Linux ma wywołanie z .bash_profile na .bashrc.
— Paul Stelian
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.