Wczytywanie konfiguracji powłoki

Większość naszych spersonalizowanych ustawień powłoki (aliasy, funkcje) dopisujemy do pliku ~/.bashrc, niestety nie zawsze są one wczytywane i dla nas dostępne, a więc sądzimy że nie działają.

Podczas uruchomienia powłoki bash jest wczytywanych parę plików konfiguracyjnych w zalezności od tego co bash ma dostępne oraz z jakimi parametrami jest uruchamiany takie pliki są ładowane.

Rodzaje uruchomień powłoki

Rodzaj powłoki Krótka charaktyrystyka kiedy występuje dany rodzaj
interactive login shell

Najcześciej dostaniemy login shell wtedy kiedy:

  • zalogujemy się przez tty, z pominięciem GUI
  • zalogujemy się zdalnie np. przez ssh

Ostrzeżenie

Aplikacje gnome-terminal lub KDE konsole, najczesciej nie są login shell. login shell został uruchomiony raz przy starcie środowiska GNOME lub KDE „za naszymi plecami” jak się logowaliśmy do systemu. Korzystając z window managerów najcześciej są uruchamine tylko interactive non-login shell.

W MAC OS X aplikacja Terminal.app zaliczana jest jako login shell.

interactive non-login shell To jest rodzaj powłoki na którą będziemy trafiać najczęściej. Dlatego powinniśmy wszelkie personalizacje przygotowac z myślą o tym rodzaju powłoki.
script Powłoka uruchamiana dla skryptów, oraz do poleceń wykonywanych przez ssh.

Pliki personalizujące powłokę

Różnice w ładowaniu plików startowych wynikają z konieczności zachowania kompatybilności wstecz. Poniższa tabela powinna odpowiedzieć na pytanie, gdzie najlepiej umieścić definicję naszych zmiennych.

  Interactive login Interactive non-login Script
/etc/profile 1    
/etc/bash.bashrc   1  
~/.bashrc   2  
~/.bash_profile 2.1    
~/.bash_login 2.2    
~/.profile 2.3    
${BASH_ENV}     1
~/.bash_logout 3    
Legenda: Tabelę należy czytać kolumnami np. „Interactive login”, najpierw wczytuje plik oznaczony jako 1, następnie 2, następnie 3. Zapis 2.1, 2.2, 2.3 oznacza, że powłoka załaduje jeden z tych plików - ten który znajdzie jako pierwszy.
map to buried treasure

Diagram przepływu obrazujący sekwencję wczytywaina i sprawdzania plików z personalizacjami powłoki bash.

Diagram jest rozszerzoną wersją z paru blogów: [1], [2], [3].

Dodatek - szablon pliku personalizującego powłokę

Poniżej zamieszzcam szablon pliku .bashrc pozwalającego w łatwy sposób zapanować nad złożonością ustawień Basha.

Większość ustawień powinna trafić do sekcji general configuration.

Komendy które powodują pojawienie się wyjścia na konsoli powinny trafić do sekcji shell is interactive. Komenda : nie robi nic - ale powinna zostać by nie powodować błędów w przetwarzaniu.

W taki sposób jest tylko jeden plik który można wczytać do powłoki, polecam wykonać polecenie cd && ln -s .bashrc .bash_profile by nowo utworzony plik się zawsze ładował.

# Bash customization file

#General configuration starts: stuff that you always want executed

#General configuration ends

if [[ -n $PS1 ]]; then
    : # These are executed only for interactive shells
    echo "interactive"
else
    : # Only for NON-interactive shells
fi

if shopt -q login_shell ; then
    : # These are executed only when it is a login shell
    echo "login"
else
    : # Only when it is NOT a login shell
    echo "nonlogin"
fi