Skip to content

Jak dostosować (i pokolorować) komunikat Bash

12 de sierpień de 2021
img 591b632d9bac1

Większość dystrybucji Linuksa konfiguruje monit Bash tak, aby wyglądał mniej więcej username@hostname:directory$ . Ale możesz skonfigurować monit Bash tak, aby zawierał wszystko, co chcesz, a nawet wybierał dowolne kolory.

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

Gdzie przechowywana jest zmienna monitu

Twoja konfiguracja monitu 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 to bob, plik jest w /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, z którym czujesz się komfortowo. Otwórz Terminal i uruchom:

nano ~/.bashrc

1628777504 167 Jak dostosowac i pokolorowac komunikat Bash

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

${debian_chroot:+($debian_chroot)}u@h:w$

1628777504 646 Jak dostosowac i pokolorowac komunikat Bash


Jest to wciąż trochę skomplikowane ze względu na ${debian_chroot:+($debian_chroot)} bity. Po prostu informują Bash, aby powiadomił Cię, jeśli używasz środowiska chroot Debiana i zwykle nie są one wyświetlane. Ignorując je, oto domyślna struktura zmiennej zachęty Bash:

u@h:w$

u wskazuje Twoją nazwę użytkownika, @ wskazuje 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. Więc łącząc to wszystko razem, otrzymujesz username@hostname:working_directory$.

Aby zmienić monit Bash, wystarczy dodać, usunąć lub zmienić kolejność znaków specjalnych w zmiennej PS1. Istnieje jednak znacznie więcej zmiennych, których możesz użyć niż te domyślne.

Na razie zostaw edytor tekstu — w nano naciśnij Ctrl+X, aby wyjść. Pokażemy Ci, jak eksperymentować ze zmiennymi, zanim faktycznie zapiszesz nową do pliku .bashrc.

Jak utworzyć niestandardowy monit Bash

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

DEFAULT=$PS1

Możesz teraz ustawić zmienną PS1 na różne wartości, aby poeksperymentować. Na przykład pierwszy wiersz tutaj ustawi Twój znak zachęty na podstawowy monit „user$”, podczas gdy drugi ustawi monit na podstawowy monit „user:working_directory$”.

PS1=”u$ ”

PS1=”u:w$ „


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

PS1=$DEFAULT

Bash zostanie przywrócony do domyślnego monitu dzięki temu, że 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 zalogować ponownie lub zamknąć i ponownie otworzyć okno terminala, aby wrócić do domyślnego monitu. Ale powyższa linia umożliwia łatwy powrót do domyślnego monitu Bash bez konieczności wylogowywania się lub zamykania okna.

1628777504 957 Jak dostosowac i pokolorowac komunikat Bash

Do zmiennej można dodać dowolne znaki lub tekst. Tak więc, aby poprzedzić domyślny monit słowem „Hello World”, możesz użyć:

PS1=”Hello Worldu@h:w$ „

1628777505 150 Jak dostosowac i pokolorowac komunikat Bash

Teraz, gdy znasz już podstawy, musisz tylko wiedzieć, jakie są wszystkie znaki specjalne. Prawdopodobnie nie będzie Cię obchodzić wiele z nich, ale oto pełna lista, jaka pojawia się w instrukcja Bash:

  • Postać dzwonka: a
  • Data w formacie „Dzień tygodnia Data miesiąca” (np. „Wtorek 26 maja”): d
  • Format jest przekazywany do strftime(3), a wynik jest wstawiany do ciągu znaków zachęty; pusty format skutkuje reprezentacją czasu specyficzną dla regionu. Aparaty są wymagane:D{format}
  • Znak ucieczki: e
  • Nazwa hosta, do pierwszego znaku „.”: h
  • Nazwa hosta: H
  • Liczba zadań aktualnie zarządzanych przez powłokę: j
  • Podstawowa nazwa nazwy urządzenia końcowego powłoki: l
  • Nowa linia: n
  • Zwrot karetki: r
  • Nazwa powłoki, nazwa podstawowa $0 (część po ostatnim ukośniku): s
  • Godzina w formacie 24-godzinnym GG:MM:SS: t
  • Godzina w formacie 12-godzinnym GG:MM:SS: T
  • Godzina w formacie 12-godzinnym: @
  • Godzina w formacie 24-godzinnym GG:MM: A
  • Nazwa użytkownika bieżącego użytkownika: u
  • Wersja Bash (np. 2.00): v
  • Wydanie Bash, wersja + patchlevel (np. 2.00.0): V
  • Bieżący katalog roboczy, z $HOME w skrócie tyldą (używa zmiennej $PROMPT_DIRTRIM): w
  • Podstawowa nazwa $PWD, z $HOME skróconą z tyldą: W
  • Numer historii tego polecenia: !
  • Numer polecenia tego polecenia: #
  • Jeśli efektywny uid to 0, #, w przeciwnym razie $: $
  • Znak, którego kod ASCII jest wartością ósemkową nnn: nnn
  • Odwrotny ukośnik:
  • Rozpocznij sekwencję znaków niedrukowalnych. Można to wykorzystać do osadzenia sekwencji kontrolnej terminala w podpowiedzi: [
  • End a sequence of non-printing characters: ]

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

PS1=”[d t] u@hnw$ „

Nawiasy kwadratowe w tym miejscu nie są w ogóle potrzebne, ale pomagają wizualnie podzielić elementy i ułatwiają czytanie linii. Jak omówiliśmy wcześniej, możesz dodać dowolny tekst lub normalne znaki do zmiennej, którą lubisz, więc możesz użyć tego, co działa dla Ciebie.

1628777505 862 Jak dostosowac i pokolorowac komunikat Bash


Jest jeszcze jedna potężna sztuczka, o której powinieneś wiedzieć: Możesz dodać wyjście dowolnego polecenia do znaku zachęty. Za każdym razem, gdy pojawi się monit, Bash uruchomi polecenie i wypełni bieżące informacje. Aby to zrobić, po prostu dołącz dowolne polecenie, które chcesz uruchomić między dwoma ` postacie. To nie jest apostrof — to akcent, który pojawia się nad klawiszem Tab na klawiaturze.

Na przykład, powiedzmy, że chcesz wyświetlić wersję jądra Linuksa w znaku zachęty. Możesz użyć linii podobnej do następującej:

PS1=”u@h on `uname -s -r` w$ „

1628777505 448 Jak dostosowac i pokolorowac komunikat Bash

Jako inny przykład, powiedzmy, że chcesz wyświetlić czas pracy systemu i średnią obciążenia, tak jak jest wyświetlany przez uptime Komenda. Możesz użyć następującej konstrukcji, która umieszcza czas pracy na osobnej linii przed resztą monitu.

PS1=”(`uptime`)nu@h:w$ „

1628777505 267 Jak dostosowac i pokolorowac komunikat Bash

Zachęcamy do eksperymentowania z różnymi znakami specjalnymi i poleceniami, aby stworzyć idealny wiersz poleceń.

Jak dodać kolory do monitu Bash

Po ustaleniu preferowanego monitu możesz dodać do niego kolory. W rzeczywistości 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ślna zmienna monitująca o kolor z wcześniejszej wersji to:

${debian_chroot:+($debian_chroot)}[33[01;32m]u@h[33[00m]:[33[01;34m]w[33[00m]$

Lub ponownie usuwając bity debian_chroot:

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

1628777505 74 Jak dostosowac i pokolorowac komunikat Bash

To jest właściwie tylko u@h:w$ zmienna z wcześniejszych, ale z informacją o kolorze. Naprawdę możemy podzielić to na kilka sekcji:

[33[01;32m]u@h

[33[00m]:

[33[01;34m]w

[33[00m]$


Pierwsza sekcja to u@h bit, poprzedzony 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, poprzedzony informacją o kolorze, która usuwa wszelkie kolory.

1628777505 217 Jak dostosowac i pokolorowac komunikat Bash

Gdy zrozumiesz, jak tworzyć własne znaczniki kolorów, możesz dodać dowolne kolory do dowolnych sekcji monitu Bash.

Oto, co musisz wiedzieć: Musisz podać całą informację o kodzie koloru między[ oraz ] characters. Wewnątrz tagu musisz zacząć od albo 33[ or e[ to indicate to Bash that this is color information. Both 33[ and e[ do the same thing. e[ is shorter so might be more convenient to use, but we’ll use 33[ here as it matches what’s used by default. At the end of the tag, you must end with m to indicate the end of a color tag.

Breaking that down, here’s what every color tag will look like. The only difference is the information you add in place of COLOR to define the actual color:

[33[COLORm]

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

Oto wartości tekstu pierwszego planu:

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

Na przykład, ponieważ fioletowy tekst to kod koloru 32, użyjesz[33[32m] na fioletowy tekst.

1628777505 383 Jak dostosowac i pokolorowac komunikat Bash


Możesz również określić atrybut tekstu. Ten atrybut należy dodać przed numerem koloru, oddzielonym średnikiem (;). Tekst z tymi atrybutami będzie wyglądał inaczej w różnych emulatorach terminali.

Oto wartości atrybutów tekstowych:

  • Normalny tekst: 0
  • Tekst pogrubiony lub jasny: 1 (zależy od emulatora terminala.)
  • Przyciemniony tekst: 2
  • Podkreślony tekst: 4
  • Migający tekst: 5 (nie działa w większości emulatorów terminali).
  • Odwrócony tekst: 7 (odwraca kolory pierwszego planu i tła, dzięki czemu 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 dołączać normalnego atrybutu tekstowego. W każdym razie to jest domyślne.

Na przykład, ponieważ czerwony tekst to kod 31, a tekst pogrubiony to kod 1, użyjesz [33[1;31m] dla pogrubionego tekstu.

1628777505 953 Jak dostosowac i pokolorowac komunikat Bash

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

Oto wartości kolorów tła:

  • Czarne tło: 40
  • Niebieskie tło: 44
  • Błękitne 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,[33[44m] określi niebieskie tło.

1628777506 864 Jak dostosowac i pokolorowac komunikat Bash

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

PS1=”[33[42m][33[31m]u@h:w$ „


Po prostu określamy jeden kolor tła, a następnie jeden kolor tekstu pierwszego planu, który zaczyna się na początku monitu i jest stosowany do całego tekstu w monicie. Możesz jednak określić w zmiennej dowolną liczbę znaczników kolorów, aby pokolorować różne sekcje monitu w dowolny sposób.

1628777506 579 Jak dostosowac i pokolorowac komunikat Bash

Kolory tekstu tła i pierwszego planu przechodzą poza monit, chyba że określisz kod koloru 00 wyczyść informacje o kolorze. Możesz również użyć tego tagu w zmiennej, aby zresetować formatowanie z powrotem do domyślnego w dowolnym miejscu monitu. Na przykład poniższa linia kończyłaby wszystkie kolorowanie przed $ postać.

PS1=”[33[42m][33[31m]u@h:w[33[00m]$ „

1628777506 957 Jak dostosowac i pokolorowac komunikat Bash

Jak ustawić nowy domyślny monit

Gdy skończysz eksperymentować z kolorami, powinieneś mieć znak zachęty Basha, który lubisz w bieżącej sesji. Ale prawdopodobnie chcesz, aby ten nowy znak zachęty był stały, aby był automatycznie używany we wszystkich sesjach Bash.

Aby to zrobić, wystarczy zmienić zawartość zmiennej PS1 w pliku .bashrc, o której wcześniej przyjrzeliśmy się.

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

nano ~/.bashrc

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


Wprowadź kolorową zmienną PS1 pod if [ "$color_prompt" = yes ]; then linia. Wpisz zmienną bez kolorów pod else linia.

1628777506 776 Jak dostosowac i pokolorowac komunikat Bash

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ę w terminalu lub otwierając nowe okno terminala — zobaczysz dostosowany monit.

1628777506 507 Jak dostosowac i pokolorowac komunikat Bash

Czy ten post był pomocny?