Gdzie znaleźć plik .bashrc w systemie Mac OS X Snow Leopard i Lion?

89

Chcę zainstalować RVM na mojej maszynie Snow Leopard.

Mówi, że muszę dodać linię do mojego .bashrcpliku (używam bash), ale gdzie jest mój .bashrcplik?

Yuval
źródło
1
Powinieneś podać swoje rozwiązanie w odpowiedzi i zaakceptować je (będziesz musiał poczekać dzień lub dwa, zanim SU pozwoli ci na to). W ten sposób osoby z tym samym problemem mogą spojrzeć na pytanie i zobaczyć, że ma odpowiedź.
Nifle
1
Jego rozwiązanie nie różni się od najlepiej głosowanej odpowiedzi.
David Cowden,
Dla pewności nie jest to kwestia „Linux = .bashrc vs. Mac OS =. (Bash_)” pliki startowe powłoki działają tak samo na Linux i Mac, a plik .bashrc jest bardziej odpowiednim miejscem na sesję określone ustawienia. używasz na przykład tmux lub screena, możesz nie mieć sesji logowania, ale nadal chcesz mieć swoje aliasy. Powodem, dla którego Mac czuje się inaczej, jest to, że większość dystrybucji Linuksa dostarcza skrypty profilów systemowych lub profile szkieletowe, które już delegują (źródłowe) bashrc.
eckes

Odpowiedzi:

78

Jeśli chodzi o problem z .bashrcpowyższym:

W większości systemów ~/.bashrcjest używany tylko przy uruchamianiu interaktywną bez logowania skorupę . Jednak po uruchomieniu nowej powłoki często jest to interaktywna powłoka logowania . Ponieważ jest to powłoka logowania , .bashrcjest ignorowana. Aby zachować spójność środowiska między powłokami niezalogowanymi i powłokami logowania, musisz je pobrać .bashrcze swojego .profilelub swojego .bash_profile.

Zobacz Podręcznik referencyjny Bash, sekcja 6.2 Pliki startowe Bash

Wywoływany jako interaktywna powłoka logowania lub --login

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.

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.

Zwykle plik ~ / .bash_profile zawiera wiersz

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

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

Na moim Macu (z systemem Leopard) nie było linii do źródła ~/.bashrc. Musiałem dodać tę funkcjonalność samodzielnie.

W niektórych systemach i innych systemów operacyjnych, .bashrcjest pozyskiwane z globalnym /etc/profilelub /etc/bash_profile, czy odbywa się za pomocą plików szablonów z /etc/skel.

Aby być uczciwym rozróżnienie .bashrci .bash_profilenie jest dobrze rozumiane przez społeczność. Kiedy wielu programistów mówi „Dodaj to do .bashrc”, tak naprawdę mają na myśli „Dodaj to do .bash_profile”. Chcą funkcjonalność zostać dodany do logowania skorupy (co jest .bash_profile), a nie do nie-logowania powłoki. W rzeczywistości zazwyczaj nie ma to znaczenia, a umieszczenie konfiguracji w niej .bashrcjest dopuszczalne.

Stefan Lasiewski
źródło
Ten link daje dobry przegląd rodzajów powłok i po załadowaniu plików startowych - hacktux.com/bash/bashrc/bash_profile
studgeek
Co należy tutaj rozumieć przez „źródło”?
elgrego
@elgrego, oto dobry opis: Kiedy plik jest pozyskiwany (przez wpisanie źródłowej nazwy pliku lub .nazwa pliku w wierszu poleceń), wiersze kodu w pliku są wykonywane tak, jakby były wydrukowane w wierszu polecenia. Zobacz tldp.org/HOWTO/Bash-Prompt-HOWTO/x237.html
Stefan Lasiewski
60

Okazuje się, że w Mac OS X Snow Leopard, a także Mac OS X Lion, ładowany plik nazywa się .profile, a nie .bashrc.

To, co chcesz zrobić, to utworzyć plik ~/.profilei nazwać go .profile (jeśli jeszcze nie istnieje).

Umieść tam wszelkie potrzebne informacje, aby załadować każdą instancję bash (Dzięki, thepurplepixel).

Kilka uwag dodatkowych:

  1. Kropka przed plikiem oznacza go domyślnie jako niewidoczna dla Findera i polecenia ls. Aby wyświetlić listę niewidocznych plików za pomocą polecenia ls z terminala, użyj -ajako parametru jako takiego:ls -a
  2. ~Symbol oznacza /Users/YourUserNamegdzie twoja_nazwa_użytkownika jest shortname swój login użytkownika.

Edycja: Chris Page zauważa (poprawnie), że cokolwiek umieścisz w pliku .profile, będzie miało zastosowanie do każdej powłoki, której używasz (tj. Zhs, bash, i tak dalej). Jeśli chcesz, aby zawartość wpływała tylko na powłokę bash, umieść ją w .bash_profilepliku zamiast w .profilepliku.

Yuval
źródło
5
Odpowiedzi na twoje pytanie udzielono [poprawnie] w dniu 1 czerwca 2010 r. - jeden dzień po zadaniu pytania. Ponad rok później wracasz i podajesz dokładnie tę samą odpowiedź i akceptujesz własną odpowiedź ...
David Cowden,
3
W rzeczywistości jego odpowiedź zawiera więcej szczegółów niż odpowiedź udzielona 1 czerwca 2010 r. W szczególności odnosi się do problemu w systemie Mac OS X, który uważam za pomocny.
webworm
3
Pamiętaj, że jeśli .bash_profilejuż istnieje w twoim katalogu domowym, .profileplik nie zostanie odczytany!
Phani
Mam nową instalację Mac OS El Capitan. Nie ma pliku profilu . Wystarczy utworzyć plik .profile i to działa. Osobiście zmieniłem nazwę .bashrc na .profile.
Nicolas Thery,
4

Musisz stworzyć własne .bashrc. Możesz po prostu użyć edytora tekstu, aby utworzyć plik o nazwie .bashrc(bez rozszerzenia) z żądaną zawartością i zapisać go w katalogu domowym ( /Users/YourUserName/).

krążyć
źródło
1
właściwie to nie działało, ale wysłałeś mnie we właściwym kierunku, mówiąc mi, żebym utworzył własny plik. Plik, który działał w konfiguracji Snow Leopard, to .profile, a nie .bashrc (który z jakiegoś powodu nie jest załadowany w tym systemie operacyjnym). Zamieszczę szczegółowe instrukcje w pytaniu. Dzięki!
Yuval
@Yuval: Domyślnie a .bashrcbędzie działać, ale tylko jeśli nie ma .profile. Chyba ~/.profileistnieje domyślnie, choć. Cieszę się, że mogłem pomóc! (I powinieneś podać swoje rozwiązanie w odpowiedzi i zaakceptować je dla przyszłych czytelników tego pytania).
squircle
Myślę, że twój komentarz na temat tylko jeśli nie ma .profile jest niepoprawny. .bashrc będzie działał w interaktywnej powłoce niezalogowanej lub jeśli pochodzi z .profile (.bash_profile jest prawdopodobnie lepszym miejscem, ponieważ .profile jest dla powłoki Bourne'a). .profile jest używany podczas interaktywnej powłoki niezalogowanej.
Stefan Lasiewski
@Stefan To brzmi więc poprawnie. Nie jestem ekspertem :)
squircle
2
Nikt nie jest ;). Te rzeczy (.bashrc vs. .profile vs. .bash_profile vs. .bash_login vs. interaktywna powłoka logowania vs. interaktywna powłoka niezalogowana vs powłoka nieinteraktywna) jest myląca i jest zepsuta i zastąpiona przez wiele uniksowych skryptów powłoki.
Stefan Lasiewski
3

Uważam, że w moim systemie operacyjnym 10.6.5 ustawienia bash znajdują się w „/ etc / bashrc”. Myślę, że jest to najwyższa specyfikacja powłoki.

Jednak potrzebujesz konta root, aby go zmodyfikować. Lokalne specyfikacje dla poszczególnych użytkowników „~ / .bashrc” powinny zaczynać się od następującego fragmentu, aby odczytać i załadować ustawienia bash na poziomie systemu:

if [ -r /etc/bashrc ]; then
    . /etc/bashrc 
fi

Zwykle dodaję aliasy w bashrc na poziomie systemu, aby wszyscy użytkownicy mieli do nich dostęp. Chyba że nie chcą używać twoich skrótów i aliasów.

Powodzenia!

geekborj
źródło
2
/ etc / profile (uruchamiany przez powłoki logowania) to globalny skrypt startowy bash, który dotyczy wszystkich użytkowników i zapewnia domyślne zachowanie powłok logowania. To z kolei uruchamia / etc / bashrc, który zawiera dostosowania, które odnoszą się zarówno do powłok logowania, jak i bez logowania. Podobnie, indywidualni użytkownicy powinni utworzyć plik ~ / .bash_profile, który uruchamia ~ / .bashrc, czyli tam, gdzie powinno być najwięcej dostosowań, a ~ / .bashrc powinien uruchomić / etc / bashrc, aby odziedziczyć domyślne zachowania dla powłok nie zalogowanych.
Chris Page
1
Dla indywidualnych użytkowników, to najlepiej, aby dodać te dostosowania do katalogu domowego na ~/.bashrcnie /etc/bashrc. /etc/bashrcto globalne ustawienia dla wszystkich użytkowników w twoim systemie, co prawdopodobnie nie jest tym, czego chcesz. Ponadto Apple może pojawiać się i zmieniać /etc/bashrcokresowo, co może zdmuchnąć twoje dostosowania.
Stefan Lasiewski
1

Użyj pliku .profile, aby dodać wszystko, co chciałbyś dodać do linuksowego pliku .bashrc.

Na przykład

PATH=/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources/:/opt/local/bin:/opt/depot_tools/:~/bin:$PATH
alias t='/Users/<username>/.todo/todo.sh'
alias punch='python /Users/<username>/.todo/Punch.py'
alias clock='cat </dev/tcp/time.nist.gov/13'
alias sudotext="sudo /Applications/TextEdit.app/Contents/MacOS/TextEdit" 
przyspiesza obrazy
źródło
2
Polecam używać ~ / .bash_profile (zamiast ~ / .profile), chyba że jesteś pewien, że chcesz, aby twoje dostosowania działały w innych powłokach i że są kompatybilne.
Chris Page
Dla pewności nie jest to kwestia „Linux = .bashrc vs. Mac OS =. (Bash_)” pliki startowe powłoki działają tak samo na Linux i Mac, a plik .bashrc jest bardziej odpowiednim miejscem na sesję określone ustawienia. używasz na przykład tmux lub screena, możesz nie mieć sesji logowania, ale nadal chcesz mieć swoje aliasy. Powodem, dla którego Mac czuje się inaczej, jest to, że większość dystrybucji Linuksa dostarcza skrypty profilów systemowych lub profile szkieletowe, które już delegują (źródłowe) bashrc.
eckes