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