Zaletą Linuksa jest to, że możesz dostosować wszystko, jeśli chcesz. Jest to przewaga systemów projektowych nad systemami proceduralnymi. Jest to rodzaj konstruktora składającego się z pojedynczych bloków, z których każdy może być dowolnie dostosowywany.
Jest to szczególnie interesujące, jeśli nie kopiujesz gotowych rozwiązań, ale starasz się zrozumieć, co i jak działa. I nawet rozwiązując błahe zadanie, można nauczyć się czegoś nowego.
Na przykład, chcesz dostosować kolory terminala linuksowego na wyjściu polecenia ls
.
Z dokumentacji ls
można zrozumieć, że ustawianie kolorów na wyjściu odbywa się za pomocą narzędzia dircolors, które albo ustawia parametry kolorów z własnej bazy danych, albo pobiera je z pliku ~/.dircolors
. Wspomniano również, że inicjalizacja użycia kolorów odbywa się za pośrednictwem ~/.bashrc
, pliku ustawień powłoki, a same parametry są definiowane za pomocą zmiennej LC_COLORS
.
Poniższy skrypt został znaleziony w .
bashrc:
Jego istotą jest sprawdzenie obecności narzędzia dircolors w systemie, przypisanie wartości do zmiennej i, jeśli się powiedzie, użycie parametru --color=auto
przy każdym wywołaniu ls
.
Uruchomienie narzędzia dircolors powoduje wypisanie wartości zmiennej LC_COLOR
.
Możliwe jest również wypisanie wartości zmiennej LC_COLORS
w postaci strukturalnej, poprzez podanie klucza:
$ dircolors -p
Ponieważ dane wyjściowe są długie, nie podam ich tutaj.
Jeśli przekierujesz wyjście dircolors -p
> ~/.dircolors
, zostanie utworzony plik strukturalny, z którego zostaną pobrane ustawienia kolorów. Edytując ten plik i ustawiając ustawienia kolorów dla wyjścia ls
.
W utworzonym pliku .dircolors
znajduje się podpowiedź:
Ustawiając sekwencję przez średnik, otrzymamy kolor, którego potrzebujemy w konsoli linux, zgodnie z listą. Kolory terminala linuksowego to od 30 do 37 dla koloru czcionki i od 40 do 47 dla tła. Na przykład:
DIR 01;34 oznacza, że nazwy katalogów będą pogrubione i niebieskie.
Ale w ten sposób otrzymujemy tylko osiem kolorów, a nowoczesne emulatory terminali są w stanie wyświetlić co najmniej 256.
Istnieją inne sposoby ustawienia koloru. Na przykład EXEC 38;5;208;1 daje pomarańczową grubą czcionkę dla plików wykonywalnych.
Aby nie przechodzić przez kolory linuksowe ręcznie, istnieje gotowa tabela kolorów
Podstawiając wartość koloru 38;5;x - gdzie x to kolor z tabeli, otrzymujemy potrzebny wynik. Otrzymujemy coś takiego:
Jak to działa? Chodzi o to, że ustawianie koloru informacji wyjściowych w emulatorze terminala odbywa się za pomocą kodów ucieczki ANSI. Jest to pewna sekwencja znaków, która nie jest drukowana na ekranie, ale wpływa na dane wyjściowe. Nazywa się tak, ponieważ zaczyna się od [ - kod "Esc". Ponieważ istnieje wiele terminali i emulatorów terminali, te kody sterujące są ustandaryzowane. Kontrola kolorów poprzez sekwencję od 30 do 37 jest standardem ECMA-48. Informacje na ten temat można znaleźć w sekcji console_codes
.
Po zrozumieniu, jak ustawić kolory linuksa za pomocą kodów esc, łatwo jest przeprojektować i pokolorować linię zachęty. Za jego wyświetlanie odpowiada zmienna PS1, zdefiniowana w pliku ~/.bashrc
W Linux Mint skrypt inicjujący ją wygląda następująco:
Czyli najpierw określane jest, czy skrypt został uruchomiony przez roota, czy zwykłego użytkownika. Ponieważ w zdecydowanej większości przypadków jest to druga opcja, należy edytować linię następującą po pierwszym "else". Format tej linii został rozszyfrowany w dokumentacji basha, w sekcji "Promting". Wynika z niej, że sekwencja esc powinna zaczynać się od "[" i kończyć "]". Zatem:
u
- wyświetla nazwę użytkownika;h
- wyświetla nazwę hosta;w
- wyświetla nazwę katalogu roboczego;Co jeszcze można wypisać w zachęcie:
d
- data, w formacie "Wed Dec 28";A
- czas, w formacie 24-godzinnym;Wprowadźmy coś bardziej interesującego:
PS1='${debian_chroot:+($debian_chroot)}[[01;32m]Matrix has you,u![[00m] [[01;34m]Blue pill[[00m] or [[31m]red?[[00m]--->$ '
A linia zachęty będzie wyglądać następująco: