2009-09-30 15:54:44 +0000 2009-09-30 15:54:44 +0000
106
106

Czym jest plik .bashrc?

Powłoki uniksowe podczas uruchamiania odczytu pliku .bashrc i wykonywania zapisanych w nim poleceń. Co to jest ten plik i co on robi?

Odpowiedzi (3)

69
69
69
2009-09-30 15:57:31 +0000

Właściwie to właśnie bash oznacza .bashrc (i /etc/bash.bashrc). Istnieje wiele różnych powłok.

Strona bash man (autorstwa Briana Foxa i Cheta Rameya; także strona informacyjna “Bash Startup Files” ](http://www.gnu.org/software/bash/manual/html_node/Bash-Startup-Files.html)) jest autorytatywnym odniesieniem:

Gdy uruchamiana jest powłoka interaktywna, która nie jest powłoką zgłoszeniową, bash czyta i wykonuje polecenia z ~/.bashrc, jeżeli plik ten istnieje. Można to zahamować posługując się opcją --norc. Opcja pliku --rcfile zmusi basha do odczytywania i wykonywania poleceń z pliku zamiast z ~/.bashrc.

Gdy bash jest uruchamiany nieinteraktywnie, aby uruchomić skrypt powłoki, na przykład, szuka w środowisku zmiennej BASH_ENV, interpretuje jej wartość, jeśli się tam pojawi, i używa zinterpretowanej wartości jako nazwy pliku do odczytu i wykonania. Bash zachowuje się tak, jakby wykonane zostało następujące polecenie:

if [-n "$BASH_ENV"]; then . "$BASH_ENV"; fi

, lecz wartość zmiennej PATH nie jest używana do szukania nazwy pliku.

Plik jest tylko poleceniami powłoki. Zazwyczaj używa się go do zmiany poleceń, ustawiania zmiennych środowiskowych i definiowania procedur powłoki. Tradycyjnie, do tego celu używany jest plik .profile, ale bash ma tak wiele rozszerzeń, że potrzebuje własnego pliku startowego dla użytkowników, którzy chcą umieścić bashizmy w plikach startowych.

Nie powłoka zgłoszeniowa” oznacza rzeczy takie jak uruchamianie skryptów i zwykle okien terminala uruchamianych przez menedżery okien. Czasami konfiguruję systemy *nix, aby mieć .bashrc i BASH_ENV tylko źródło .profile. Tak długo jak nie zabłądzisz poza POSIX-owymi komendami powłoki, otrzymasz taką samą inicjalizację w każdej z nich.

Jest to szczególnie cenne gdy sh jest naprawdę bash, co czasami się zdarza. Aby to zrobić użyj:

. .profile

Jednym z powodów, dla których jest to wszystko tak złożone jest to, że czasami ludzie umieszczają rzeczy, które generują wyjście w plikach startowych powłoki, lub bezwarunkowo ustawiają podpowiedzi. Powoduje to wiele problemów podczas uruchamiania programów powłoki i poleceń wstecznych w obrębie języków, nie wspominając o system(3) z programów C. Sposób w jaki bash uruchamia się jest zaprojektowany, jak sądzę, aby mieć jeden plik, w którym ustawienia wyjścia i podpowiedzi są OK i jeden plik, w którym nie są. Tradycyjnie, wykonywany jest test run-time, aby odróżnić interaktywność, na przykład, sprawdzając czy prompt jest ustawiony.

12
12
12
2009-09-30 15:56:30 +0000

Gdy Bash się uruchamia, wykonuje polecenia w różnych różnych skryptach.

Gdy Bash jest wywoływany jako interaktywna powłoka zgłoszeniowa, najpierw odczytuje i wykonuje polecenia z pliku /etc/profile, jeśli taki plik istnieje. Po przeczytaniu 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.

Gdy kończy pracę powłoka zgłoszeniowa, Bash czyta i wykonuje polecenia z pliku ~/.bash_logout, jeżeli istnieje.

Gdy uruchamiana jest powłoka interaktywna nie będąca powłoką zgłoszeniową, Bash czyta i wykonuje polecenia z ~/.bashrc, jeżeli plik ten istnieje. Można to zahamować posługując się opcją –norc. Opcja –rcfile file wymusi na Bashu odczyt i wykonanie poleceń z pliku zamiast z ~/.bashrc. http://en.wikipedia.org/wiki/Bash\_(Unix_shell)

Oto kilka sztuczek i wskazówek: http://www.cyberciti.biz/tips/howto-linux-unix-bash-shell-setup-prompt.html

Spróbujmy ustawić znak zachęty tak, by mógł wyświetlić dzisiejszą datę i nazwę hosta:

PS1="\d \h $ "
10
10
10
2009-09-30 15:56:46 +0000

Powinno ono zawierać różne polecenia “inicjalizacji” dla twojej powłoki, np.:

  • Tworzenie użytecznych aliasów (np. alias ll='ls -l').
  • Dodawanie kolejnych katalogów do PATH.
  • Ustawianie nowych zmiennych środowiskowych.