Jak naprawić terminal, który nie ładuje ~ / .bashrc na OS X Lion [zamknięte]

176

Za każdym razem, gdy otwieram nową kartę w Terminalu za pomocą Cmd+ T, otwiera się bash w tym samym katalogu, co poprzednia karta. Działa to dobrze, gdy jestem w ~katalogu, ale jeśli jestem w innym miejscu, pojawia się błąd podczas ładowania.bashrc

Last login: Sat Oct 15 21:10:00 on ttys002
-bash: .bashrc: No such file or directory
Jakub-Arnolds-MacBook-Pro:projects darth$ 

Wygląda na to, że .bashrcjest ładowany przez ścieżkę względną, a nie bezwzględną, ponieważ jeśli to zrobię source ~/.bashrc, wszystko działa płynnie.

załadowany bashrc

Myślę, że jest to problem związany z systemem OS X Lion, ponieważ przed aktualizacją ze Snow Leopard nie miałem tego samego problemu. Ale może to być spowodowane tym, że Terminal zawsze otwierał się o godzinie ~, nie pamiętam, czy próbował otworzyć ten sam katalog.

Jednak pytanie pozostaje takie samo, jak mogę dokonać obciążenia terminala ~/.bashrcza pomocą ścieżki bezwzględnej, a nie względnej?

Jakub Arnold
źródło
1
to pytanie należy przenieść do apple.SE (jeśli to możliwe?), a nie zamknięte.
Sparr
@Sparr Całkowicie się z tobą zgadzam, ale moderatorzy przenoszą tylko nowsze pytania, a nie starsze. Zobacz dyskusję tutaj
рüффп

Odpowiedzi:

357

Terminal otwiera powłokę logowania. Oznacza to, że ~/.bash_profilezostanie wykonany, a ~/.bashrcnie.

W większości systemów rozwiązaniem jest „wymaganie” wpisu ~/.bashrcin the ~/.bash_profile: wystarczy umieścić ten fragment w swoim ~/.bash_profile:

[[ -s ~/.bashrc ]] && source ~/.bashrc
ckruse
źródło
8
Czy ktoś mógłby wyjaśnić, co [[ -s /file/path ]]to robi? Próba uzyskania wyjaśnień w Google nie jest łatwa.
Shane,
18
From man bash: -s plik Prawda, jeśli plik istnieje i ma rozmiar większy niż zero.
ckruse
1
„Terminal otwiera powłokę logowania” - jakie są inne typy powłok systemu operacyjnego? Gdzie mogę znaleźć więcej dokumentacji na ten temat?
dknight
4
Istnieją tak zwane „powłoki interaktywne” i „powłoki logowania”. Twój podręcznik bash ( man bash) mówi o tym i wyjaśnia to, rozdział WYWOŁANIE (po prostu wyszukaj INVOCATIONpo zadzwonieniu man bash, wpisując /INVOCATION)
ckruse
3
Nie widzę, jak pytanie odnoszące się do sytuacji wykonania kodu, rozwiązane za pomocą linii kodu, jest „poza tematem” w witrynie z pytaniami programistycznymi.
Kheldar
26

Zmiana nazwy .bashrcna .profile(lub miękkie połączenie tej drugiej z pierwszą) również powinna załatwić sprawę. Zobacz tutaj .

scorpiodawg
źródło
Lub możesz je dowiązać symbolicznie: cd && ln -s ./.bashrc ./.profileZauważ, że dowiązania symboliczne są wrażliwe w odniesieniu do ścieżki pliku, uważam, że użycie powyższej składni działa, ale aby mieć pewność, że możesz używać ścieżek bezwzględnych w każdym przypadku.
Steve Benner
1
O nie? Te pliki mają różne cele. Jeśli masz w sobie składnię Bash, zepsujesz .profileregularność sh.
tripleee
14

Mam w moim ~/.bash_profile:

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

Gdybym miał .bashrczamiast ~/.bashrc, zobaczyłbym ten sam objaw, który widzisz.

Keith Thompson
źródło