2012-04-25 7 views
15

Mam kilka skryptów basha, które chcę mieć pewność, że działają domyślnie i aktualnie przechowuję je w ~/.profile na moim mac. Czy to niewłaściwe miejsce do ich przechowywania? Słyszałem o innych i próbowałem ich (jak ~/.bashrc, ~/.bash_profile, itp.), Ale nie wydają się działać.Dlaczego muszę nadal używać `source ~/.profile`, aby uzyskać ustawienia w miejscu?

Jaka jest różnica między tymi wszystkimi, a którą umieszczam w skryptach w taki sposób, że konfiguruje się w środowisku wykonawczym i nie muszę wywoływać $ source ~/.profile za każdym razem, gdy otwieram terminal?

+0

Zobacz również http://stackoverflow.com/questions/415403/whats-the-difference-between-bashrc-bash-profile-and-environment – Nakilon

Odpowiedz

7
     +-----------------+ 
        |     | 
interactive shell -->| ~/.bashrc  | 
        |     | 
        +-----------------+ 

interactive shell będzie zaopatrywać ~/.bashrc automatycznie.

Spójrz na Should the .bashrc in the home directory load automatically?

+0

Spróbuję tego. Jaka jest różnica między powłoką logowania a pozostałymi? – locoboy

+1

Interaktywna powłoka to taka, którą uruchamiasz wewnątrz terminala; oznacza to, że zarówno stdin, jak i stdout wskazują na deskryptory plików terminala. 99% powłok, z którymi pracujesz, będzie działać jako interaktywna powłoka. –

+0

Jak upewnić się, że uruchamiam interaktywny, a nie inny? Wygląda na to, że mam inny. – locoboy

2

Różne konfiguracje bash automatycznie wyszukują różne pliki w zależności od ich konfiguracji. Prawie uniwersalny plik, który jest zawsze pozyskiwany, to ~/.bashrc - jest to rdzeń bash, który załaduje ten plik. W tym pliku powinieneś dodać swoją linię do source ~/.profile, a będziesz gotowy do pracy!

-Edit-

Z mojego Linux i mojego kolegi Mac:

$ echo "echo hello" >> ~/.profile 
$ echo "source ~/.profile" >> ~/.bashrc 
$ bash 
Hello 
$ 
+0

Próbowałem to i nadal nie działa – locoboy

+0

dwukrotnym sprawdzone rozwiązanie na Macu kolegi i opublikowany. Czy możesz w tym momencie przedstawić wgląd w to, co dzieje się na twoim komputerze? Jeśli mógłbyś uruchomić i wysyłać ls -l ~/.bashrc, ls -l ~/.profile, cat ~/.bashrc, cat ~/.profile –

+1

.bashrc jest pobierany tylko wtedy, gdy powłoka jest interaktywna i * nie * jest loginem muszla. Zgodnie z konwencją, .bashrc jest wywoływane z '~/.bash_login', ale niekoniecznie jest tak ... więc nie można liczyć na wywołanie .bashrc. Zobacz link w poście @ kev. –

5

Zrobiłem to, aby rozwiązać problem:

cat .bash_profile >> .profile 
rm .bash_profile 

alternatywą jest:

echo "source ~/.profile" >> .bash_profile 
7

Jeśli oba ~/.bash_profile i ~/.profile istnieć, bash czyta ~/.bash_profile tylko kiedy jest wywoływana jako interaktywna powłoka logowania.

https://www.gnu.org/s/bash/manual/html_node/Bash-Startup-Files.html:

wywołany jako interaktywną powłokę logowania lub z --login

Gdy bash wywoływany jest jako interaktywny logowania muszli lub jako non-interaktywnej powłoki z --login opcja, najpierw odczytuje i wykonuje polecenia z pliku /etc/profile, jeśli ten plik istnieje. Po odczytaniu tego pliku, szuka w tej kolejności ~/.bash_profile, ~/.bash_login i ~/.profile, a także odczytuje i wykonuje polecenia od pierwszego, które istnieje i można je odczytać.

[...]

Wykonano jako interaktywny bez logowania skorupy

Kiedy interaktywna powłoka nie jest powłoką logowania jest uruchomiony, bash czyta i wykonuje polecenia z ~/.bashrc, jeśli plik istnieje.

~/.profile jest również używany przez inne powłoki.

Terminal i iTerm domyślnie otwierają nowe powłoki jako powłoki logowania (wykonując coś takiego jak login -pf $USER), ale wiele aplikacji terminalowych GNU/Linux otwiera nowe powłoki jako powłoki niezalogowane. Użytkownicy OS X często używają ~/.bash_profile zamiast ~/.bashrc.

2

Upewnij się, jeśli nie source ~/.profile w twojej .bashrc że wykomentowac żadnych poleceń (w .profile) zadzwonić lub źródło .bashrc w .profile czy to będzie pętli na zawsze i nigdy nie dostanie wiersz.

Powiązane problemy