Główna » jak » Jak dostosowywać (i kolorować) swój monit o bash

    Jak dostosowywać (i kolorować) swój monit o bash

    Większość dystrybucji Linuksa konfiguruje podpowiedź Bash tak, aby wyglądała jak nazwa_użytkownika @ nazwa_hosta: katalog $ . Ale możesz tak skonfigurować podpowiedź Bash, aby zawierała co chcesz, a nawet wybierać dowolne kolory.

    Przykładowe kroki tutaj zostały przeprowadzone na Ubuntu 16.04 LTS. Proces powinien być taki sam w innych dystrybucjach systemu Linux, chociaż domyślny monit i ustawienia Bash w pliku .bashrc mogą być nieco inne.

    Gdzie przechowywana jest zmienna monitująca

    Twoja konfiguracja podpowiedzi Bash jest przechowywana w pliku .bashrc Twojego konta użytkownika, który znajduje się pod adresem ~ / .bashrc. Tak więc, jeśli twoja nazwa użytkownika jest bob, plik jest na /home/bob/.bashrc.

    Możesz otworzyć plik, aby wyświetlić bieżącą zmienną Bash. Użyjemy nano jako naszego przykładowego edytora tekstu, chociaż możesz również użyć vi, emacs lub dowolnego innego edytora tekstu, w którym czujesz się komfortowo. Otwórz terminal i uruchom:

    nano ~ / .bashrc

    Przewiń w dół do PS1 = Sekcja. Pierwsza zmienna wygląda dość skomplikowanie, ponieważ zawiera informacje o kolorach - wyjaśnimy to później. Druga zmienna, bez informacji o kolorze, brzmi następująco:

    $ debian_chroot: + ($ debian_chroot) \ u @ \ h: \ w \ $

    To wciąż jest trochę skomplikowane ze względu na $ debian_chroot: + ($ debian_chroot) bity. Po prostu powiedz Bashowi, żeby cię poinformował, jeśli używasz środowiska chroot Debiana i zwykle nie będzie pokazywane. Ignorując je, oto domyślna struktura zmiennej wiersza polecenia Bash:

    \ u @ \ h: \ w \ $

    \ u wskazuje twoją nazwę użytkownika, @ oznacza znak @, \ h wskazuje nazwę hosta (nazwę komputera), : wskazuje: znak, \ w wskazuje katalog roboczy, i \ $ wskazuje $ jeśli jesteś normalnym kontem użytkownika lub # jeśli jesteś rootem. Łącząc to wszystko, otrzymujesz nazwa_użytkownika @ nazwa_hosta: working_directory $.

    Aby zmienić zapytanie Bash, wystarczy dodać, usunąć lub zmienić układ znaków specjalnych w zmiennej PS1. Istnieje jednak wiele innych zmiennych, niż te domyślne.

    Pozostaw edytor tekstu dla teraz-w nano, naciśnij Ctrl + X, aby wyjść. Pokażemy Ci, jak eksperymentować ze zmiennymi, zanim zaczniesz pisać nowy plik .bashrc.

    Jak utworzyć niestandardowy prompt bashu

    Twoja konfiguracja podpowiedzi Bash jest przechowywana w zmiennej PS1. Aby zapisać zawartość zmiennej PS1 w nowej zmiennej, uruchom następujące polecenie:

    DEFAULT = $ PS1

    Możesz teraz ustawić zmienną PS1 na różne wartości do eksperymentowania. Na przykład w pierwszym wierszu zostanie wyświetlony monit o podanie podstawowego monitu "user $", a drugi spowoduje ustawienie monitu na podstawowy monit "user: working_directory $".

    PS1 = "\ u \ $" PS1 = "\ u: \ w \ $"

    Jeśli kiedykolwiek będziesz chciał wrócić do domyślnego pytania, po prostu uruchom następujące polecenie.

    PS1 = $ DEFAULT

    Bash zostanie przywrócony do domyślnego polecenia, ponieważ wcześniej zapisałeś te domyślne ustawienia. Pamiętaj, że wszelkie wprowadzone tutaj zmiany są tylko tymczasowe dla bieżącej sesji Bash, więc zawsze możesz się wylogować i ponownie zalogować lub zamknąć i ponownie otworzyć okno terminala, aby powrócić do domyślnego monitu. Ale powyższa linia umożliwia łatwe przywrócenie domyślnego wiersza poleceń Bash bez konieczności wylogowywania się lub zamykania okna.

    Możesz dodać dowolne znaki lub tekst do zmiennej. Tak więc, aby poprzedzić domyślny znak zachęty słowem "Hello World", możesz użyć:

    PS1 = "Hello World \ u @ \ h: \ w \ $"

    Teraz, gdy masz już podstawy, po prostu musisz wiedzieć, jakie są wszystkie znaki specjalne. Prawdopodobnie nie będziesz się przejmował wieloma z nich, ale oto pełna lista, jak pojawia się w podręczniku Bash:

    • Dzwonkowa postać: \za
    • Data w formacie "Data tygodnia miesiąca" (np. "Wt. 26 maja"): \re
    • Format jest przekazywany do strftime (3), a wynik jest wstawiany do łańcucha podpowiedzi; pusty format daje lokalną reprezentację czasową. Szelki są wymagane: \ D format
    • Znak ucieczki: \mi
    • Nazwa hosta, do pierwszego ".": \ h
    • Nazwa hosta: \ H
    • Liczba zadań aktualnie zarządzanych przez powłokę: \jot
    • Nazwa podstawowa nazwy urządzenia końcowego powłoki: \ l
    • Nowa linia: \ n
    • Zwrot karetki: \ r
    • Nazwa powłoki, której podstawowa wartość to 0 USD (część następującej po ostatnim ukośniku): \ s
    • Czas, w 24-godzinnym formacie HH: MM: SS: \ t
    • Czas, w 12-godzinnym formacie HH: MM: SS: \ T
    • Czas w formacie 12-godzinnym am / pm: \ @
    • Czas, w 24-godzinnym formacie HH: MM: \ZA
    • Nazwa użytkownika bieżącego użytkownika: \ u
    • Wersja Bash (np. 2,00): \ v
    • Wersja Bash, wersja + patchlevel (np. 2.00.0): \ V
    • Aktualny katalog roboczy z $ HOME skróconą tyldą (używa zmiennej $ PROMPT_DIRTRIM): \ w
    • Nazwa podstawowa $ PWD, z $ HOME skróconą tyldą: \ W
    • Numer historii tego polecenia: \!
    • Numer polecenia tego polecenia: \ #
    • Jeśli efektywny uid wynosi 0, #, w przeciwnym razie $: \ $
    • Znak, którego kod ASCII jest wartością ósemkową nnn: \ nnn
    • Odwrotny ukośnik: \\
    • Rozpocznij sekwencję niedrukowalnych znaków. Można to wykorzystać do osadzenia sekwencji kontrolnej terminala w zachęcie: \ [
    • Zakończ sekwencję niedrukowalnych znaków: \]

    Tak więc, jeśli chcesz dodać datę i godzinę do wiersza Basha i umieścić katalog roboczy na polecenie w drugiej linii, możesz użyć następującej konstrukcji:

    PS1 = "[\ d \ t] \ u @ \ h \ n \ w \ $"

    Kwadratowe nawiasy w tym miejscu nie są konieczne, ale pomagają rozbijać elementy wizualnie i ułatwiają czytanie linii. Jak już omówiliśmy wcześniej, możesz dodać dowolny tekst lub zwykłe znaki do zmiennej, którą lubisz, więc możesz użyć tego, co działa.

    Jest jeszcze jeden potężny trik, o którym powinieneś wiedzieć: możesz dodać wynik polecenia do podpowiedzi. Za każdym razem, gdy pojawi się monit, Bash uruchomi polecenie i uzupełni bieżące informacje. Aby to zrobić, dołącz dowolne polecenie, które chcesz uruchomić między dwoma " postacie. To nie jest apostrof - jest to poważny akcent, który pojawia się nad klawiszem Tab na klawiaturze.

    Na przykład, powiedzmy, że chcesz wyświetlić wersję jądra systemu Linux w monicie. Możesz użyć linii podobnej do poniższej:

    PS1 = "\ u @ \ h na" uname -s -r "\ w \ $"

    Jako inny przykład, powiedzmy, że chcesz wyświetlić czas pracy systemu i obciążenie średnie, zgodnie z wyświetlaniem czas działania dowództwo. Możesz użyć poniższej konstrukcji, która przed upływem czasu zachęci do uptime na własnej linii.

    PS1 = "(" uptime ") \ n \ u @ \ h: \ w $"

    Możesz eksperymentować z różnymi znakami specjalnymi i poleceniami, aby złożyć idealny wiersz polecenia.

    Jak dodać kolory do bashu

    Po ustaleniu preferowanego pytania możesz dodać do niego kolory. Jest to bardzo proste, ale sprawia, że ​​zmienna wygląda na strasznie niechlujną i skomplikowaną, jeśli nie rozumiesz, na co patrzysz.

    Na przykład domyślną zmienną kolorów z wcześniejszych:

    $ debian_chroot: + ($ debian_chroot) \ [\ 033 [01; 32m \] \ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ $

    Lub, usuwając ponownie bity debian_chroot:

    \ [\ 033 [01; 32m \] \ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ $

    To jest po prostu \ u @ \ h: \ w $ zmienna z wcześniejszego, ale z informacją o kolorze. Naprawdę możemy podzielić go na kilka sekcji:

    \ [\ 033 [01; 32m \]\ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \]\ w \ [\ 033 [00m \]\ $

    Pierwsza sekcja to \ u @ \ h bit, poprzedzona informacją o kolorze, która zmienia kolor na zielony. Drugi to : znak, poprzedzony informacją o kolorze, która usuwa wszelkie kolory. Trzeci to \ w bit, poprzedzona informacją o kolorze, która zmienia kolor na niebieski. Czwarty to \ $ bit, poprzedzona informacją o kolorze, która usuwa wszelkie kolory.

    Gdy zrozumiesz, jak tworzyć własne tagi kolorów, możesz dodać dowolne kolory do dowolnych sekcji w twoim bashie.

    Oto, co powinieneś wiedzieć: Musisz zawrzeć całą informację o kodzie koloru pomiędzy \ [  i \] postaćs. Wewnątrz tagu musisz zacząć od \ 033 [ lub \mi[ aby wskazać Bashowi, że jest to informacja o kolorze. Obie \ 033 [ i \mi[ Zrób to samo. \mi[ jest krótszy, więc może być wygodniejszy w użyciu, ale użyjemy go \ 033 [ tutaj, ponieważ pasuje do tego, co jest używane domyślnie. Na końcu tagu musisz kończyć m \ aby wskazać koniec kolorowego znacznika.

    Łamiąc to, oto jak będzie wyglądał każdy tag koloru. Jedyną różnicą są informacje, które dodajesz w miejsce KOLORU, aby zdefiniować rzeczywisty kolor:

    \ [\ 033 [KOLORm \]

    Bash pozwala zmienić kolor tekstu pierwszego planu, dodać do tekstu atrybuty takie jak "pogrubienie" lub "podkreślenie" i ustawić kolor tła.

    Oto wartości tekstu pierwszego planu:

    • Czarny: 30
    • Niebieski: 34
    • Cyan: 36
    • Zielony: 32
    • Fioletowy: 35
    • Czerwony: 31
    • Biały: 37
    • Żółty: 33

    Na przykład, ponieważ fioletowy tekst jest kodem koloru 32, użyłbyś go \ [\ 033 [32m \]  dla fioletowego tekstu.

    Możesz również określić atrybut dla tekstu. Ten atrybut musi zostać dodany przed numerem koloru, oddzielony średnikiem (;). Tekst o tych atrybutach będzie wyglądał inaczej w różnych emulatorach terminali.

    Oto wartości atrybutów tekstu:

    • Normalny tekst: 0
    • Pogrubienie lub jasny tekst: 1 (zależy od emulatora terminala.)
    • Dim Text: 2
    • Podkreślony tekst: 4
    • Migający tekst: 5 (To nie działa w przypadku większości emulatorów terminali.)
    • Tekst odwrócony: 7 (Powoduje odwrócenie kolorów pierwszego planu i tła, dzięki czemu czarny tekst na białym tle zostanie wyświetlony, jeśli bieżący tekst jest białym tekstem na czarnym tle).
    • Ukryty tekst: 8

    W rzeczywistości nie musisz uwzględniać zwykłego atrybutu tekstowego. W każdym razie to jest domyślne.

    Na przykład, ponieważ czerwony tekst to kod 31, a pogrubiony tekst to kod 1, użyłbyś go \ [\ 033 [1; 31m \] dla pogrubionego czerwonego tekstu.

    Możesz także określić kolor tła, ale nie możesz dodać atrybutu do koloru tła.

    Oto wartości dla kolorów tła:

    • Czarne tło: 40
    • Niebieskie tło: 44
    • Cyan tło: 46
    • Zielone tło: 42
    • Fioletowe tło: 45
    • Czerwone tło: 41
    • Białe tło: 47
    • Żółte tło: 43

    Na przykład, ponieważ niebieskie tło to kod 44, \ [\ 033 [44m \] określałoby niebieskie tło.

    Można określić znaczniki koloru pierwszego planu i tła. Na przykład 42 reprezentuje zielone tło, a 31 reprezentuje czerwony tekst. Tak więc, aby domyślny monit stał się czerwonym tekstem na zielonym tle, używałbyś:

    PS1 = "\ [\ 033 [42m \] \ [\ 033 [31m \] \ u @ \ h: \ w \ $ "

    Podajemy tutaj tylko jeden kolor tła, a następnie pojedynczy tekst pierwszego planu, który zaczyna się na początku monitu i jest stosowany do całego tekstu w monicie. Można jednak określić dowolną liczbę znaczników kolorów w zmiennej, aby pokolorować różne sekcje wiersza polecenia, tak jak lubisz.

    Kolory tekstu tła i pierwszego planu są wyświetlane dalej, chyba że zostanie podany kod koloru 00, aby usunąć informacje o kolorach. Możesz również użyć tego znacznika wewnątrz zmiennej, aby przywrócić domyślne formatowanie w swoim zapytaniu. Na przykład poniższy wiersz zakończyłby wszystkie kolory przed \ $ postać.

    PS1 = "\ [\ 033 [42m \] \ [\ 033 [31m \] \ u @ \ h: \ w \\ [\ 033 [00m \] \ $ "

    Jak ustawić nowy monit domyślny

    Gdy skończysz eksperymentować z kolorami, powinieneś otrzymać podpowiedź Bash, którą lubisz w bieżącej sesji. Prawdopodobnie jednak chcesz, aby ten nowy monit stał się trwały, aby był automatycznie używany we wszystkich sesjach Bash.

    Aby to zrobić, wystarczy zmienić zawartość zmiennej PS1 w pliku .bashrc, który sprawdziliśmy wcześniej.

    Otwórz plik .bashrc w preferowanym edytorze tekstu, na przykład:

    nano ~ / .bashrc

    Przewiń w dół i znajdź sekcję PS1 =. Po prostu zastąp zmienną domyślną zmienną niestandardową. Prawdopodobnie będziesz chciał opuścić $ debian_chroot: + ($ debian_chroot)  jednak same bity nie pojawią się, chyba że jesteś w środowisku chroot.

    Wprowadź swoją kolorową zmienną PS1 pod if ["$ color_prompt" = yes]; następnie linia. Wprowadź zmienną bez kolorów pod znakiem jeszcze linia.

    Zapisz plik i zamknij edytor tekstu. Na przykład, aby zapisać plik w nano, naciśnij Ctrl + O, naciśnij Enter, a następnie naciśnij Ctrl + X, aby wyjść.

    Następnym razem, gdy uruchomisz nową powłokę Bash - na przykład logując się na terminalu lub otwierając nowe okno terminala - zobaczysz spersonalizowany monit.