If-Koubou

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

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

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, by 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 nadal jest trochę skomplikowane ze względu na $ debian_chroot: + ($ debian_chroot) bity. Po prostu powiedz Bashowi, żeby Cię powiadomił, 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, @ wskazuje znak @, \ h wskazuje nazwę hosta (nazwę komputera), : wskazuje: postać, \ 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 @ nazwahosta: 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 Bash

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 "użytkownik $", a drugi spowoduje ustawienie monitu na podstawowy monit "user: working_directory $".

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

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

PS1 = $ DEFAULT

Bash przywróci domyślny monit, 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.

Do zmiennej można dodać dowolne znaki lub tekst. Tak więc, aby przedłużyć domyślny wiersz "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, która 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 formacie 12-godzinnego 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
  • Bieżący 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 \ $"

Nawiasy kwadratowe tutaj 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 swobodnie korzystać z tego, co działa.

Jest jeszcze jeden potężny trik, o którym powinieneś wiedzieć: możesz dodać wynik polecenia do podpowiedzi. 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, jak wyświetla się przez czas działania dowództwo. Można użyć poniższej konstrukcji, która przed upływem czasu oczekiwania umieszcza 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 monitu o Bash

Po ustaleniu preferowanego pytania możesz dodać do niego kolory. Jest to bardzo proste, ale sprawia, że ​​zmienna wygląda okropnie niechlujnie i jest skomplikowana, 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śniejszych, ale z informacjami 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, poprzedzony 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ć wszystkie informacje o kodzie koloru mię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 zakończyć m \ aby wskazać koniec kolorowego znacznika.

Łamiąc to, oto jak będzie wyglądał każdy tag koloru. Jedyną różnicą jest informacja, którą 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ż purpurowy tekst ma kod koloru 32, użyłbyś go \[\033[32m \] dla fioletowego tekstu.

Możesz także 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 (To odwraca kolory pierwszego planu i tła, więc zobaczysz czarny tekst na białym tle, 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żesz 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 wyczyścić informacje o kolorach. Możesz również użyć tego znacznika wewnątrz zmiennej, aby przywrócić domyślne formatowanie w swoim podpowiedzi. 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. Ale prawdopodobnie chcesz, aby ta nowa zachęta stała się na stałe, więc jest automatycznie używana 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 =. Wystarczy zastąpić domyślną zmienną 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 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 zakończyć.

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.