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.
| Rodzaj powłoki | Krótka charaktyrystyka kiedy występuje dany rodzaj |
|---|---|
interactive login shell |
Najcześciej dostaniemy
Ostrzeżenie Aplikacje gnome-terminal lub KDE konsole, najczesciej nie są W MAC OS X aplikacja Terminal.app zaliczana jest jako |
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. |
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. |
|||
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