Pagina principala » HOWTO » Cum de a personaliza (și colora) Bash Prompt

    Cum de a personaliza (și colora) Bash Prompt

    Cele mai multe distribuții Linux configurează promptul Bash pentru a arăta ceva asemănător username @ nume de gazdă: director $ . Dar puteți configura promptul Bash să conțină ceea ce vă place și chiar să alegeți culorile care vă plac.

    Exemplele de pași aici au fost efectuate pe Ubuntu 16.04 LTS. Procesul ar trebui să fie același pe alte distribuții Linux, deși setările implicite Bash și setările din fișierul .bashrc pot fi puțin diferite.

    Unde este stocată variabila promptă

    Configurația dvs. de prompt Bash este stocată în fișierul .bashrc al contului dvs. de utilizator, care este la ~ / .Bashrc. Deci, dacă numele dvs. de utilizator este bob, fișierul este la /home/bob/.bashrc.

    Puteți deschide fișierul pentru a vedea variabila Bash curentă. Vom folosi nano ca editor de text exemplu, deși ai putea folosi și vi, emacs sau orice alt editor de text cu care te simți confortabil. Deschideți un terminal și rulați:

    nano ~ / .bashrc

    Derulați în jos până la PS1 = secțiune. Prima variabilă pare destul de complicată deoarece include informații despre culoare - vom explica mai târziu. A doua variabilă, fără informații despre culoare, are următorul conținut:

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

    Acest lucru este încă puțin complicat datorită $ Debian_chroot: + ($ debian_chroot) biți. Acestea spun doar lui Bash să vă anunțe dacă utilizați un mediu chroot Debian și, în mod normal, nu va fi afișat. Dacă ignorați aceste elemente, iată structura implicită a variabilei de prompt Bash:

    \ U @ \ h: \ w \ $

    \ u indică numele dvs. de utilizator, @ indică semnul @, \ h indică numele gazdei (numele computerului), : indică caracterul:, \ w indică directorul de lucru și \ $ indică un $ dacă sunteți un cont de utilizator normal sau # dacă sunteți rădăcină. Deci, punând asta împreună, veți obține Nume utilizator @ hostname: $ working_directory.

    Pentru a schimba promptul dvs. Bash, trebuie doar să adăugați, să eliminați sau să rearanjați caracterele speciale din variabila PS1. Dar există mai multe variabile pe care le puteți utiliza decât cele implicite.

    Lăsați editorul de text pentru acum - în nano, apăsați pe Ctrl + X pentru a ieși. Vă vom arăta cum să experimentați cu variabile înainte de a scrie un nou într-un fișier .bashrc.

    Cum se creează o comandă de bază personalizată

    Configurația promptului dvs. Bash este stocată în variabila PS1. Pentru a salva conținutul variabilei PS1 într-o variabilă nouă, executați următoarea comandă:

    DEFAULT = $ PS1

    Acum puteți seta variabila PS1 la valori diferite pentru a experimenta. De exemplu, prima linie de aici vă va stabili promptul la o solicitare de bază "user $", în timp ce al doilea va seta promptul dvs. la un prompt "user: working_directory $".

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

    Dacă vreți să reveniți la promptul implicit, executați următoarea comandă.

    PS1 = $ DEFAULT

    Bash va fi restaurat la promptul său implicit datorită faptului că ați salvat mai devreme aceste setări implicite. Rețineți că toate modificările pe care le faceți aici sunt doar temporare pentru sesiunea Bash curentă, astfel încât să puteți oricând să vă deconectați, să vă conectați sau să închideți și să redeschideți fereastra terminalului pentru a reveni la promptul implicit. Dar linia de mai sus face posibilă revenirea cu ușurință la promptul dvs. Bash implicit, fără a fi nevoie să vă deconectați sau să închideți o fereastră.

    Puteți adăuga orice caractere sau text la variabila. Deci, pentru a prefixa promptul implicit cu "Hello World", puteți folosi:

    PS1 = "Bună ziua lumii \ u @ \ h: \ w \ $"

    Acum, că ai înțelesurile de bază, trebuie doar să știi care sunt toate personajele speciale. Probabil nu vă va interesa multe dintre ele, dar aici este lista completă așa cum apare în manualul Bash:

    • Un caracter clopot: \A
    • Data, în formatul "Luna zilei săptămânii" (de exemplu, "Tue 26 mai"): \ d
    • Formatul este transmis la strftime (3) iar rezultatul este introdus în șirul prompt; un format gol are ca rezultat o reprezentare temporală specifică locale. Sunt necesare bretele: \ D format
    • Un caracter de evadare: \ e
    • Numele gazdei, până la primul ".": \ h
    • Numele gazdei: \ H
    • Numărul de locuri de muncă gestionate în prezent de shell: \ j
    • Numele de bază al denumirii dispozitivului terminal al shell-ului: \ l
    • O linie nouă: \ n
    • Un retur de transport: \ r
    • Numele shell-ului, numele de bază al lui $ 0 (porțiunea care urmează ultimei tăieturi): \ s
    • Timpul, în 24 de ore HH: MM: Format SS: \ t
    • Timpul, în 12 ore HH: MM: Format SS: \ T
    • Ora, în formatul am / pm de 12 ore: \ @
    • Timpul, în formatul de 24 de ore HH: MM: \A
    • Numele de utilizator al utilizatorului curent: \ u
    • Versiunea Bash (de exemplu, 2,00): \ v
    • Eliberarea lui Bash, versiunea + patchlevel (de exemplu, 2.00.0): \ V
    • Actualul director de lucru, cu $ HOME abreviat cu un tildă (folosește variabila $ PROMPT_DIRTRIM): \ w
    • Numele de bază al lui $ PWD, cu $ HOME abreviat cu un tilde: \ W
    • Numărul istoric al acestei comenzi: \!
    • Numărul de comandă al acestei comenzi: \ #
    • Dacă uid-ul efectiv este 0, #, altfel $: \ $
    • Personajul al cărui cod ASCII este valoarea octală nnn: \ nnn
    • O retrospectivă: \\
    • Începeți o secvență de caractere care nu sunt tipărite. Acest lucru ar putea fi folosit pentru a încorpora o secvență de control terminale în prompt: \ [
    • Sfârșitul unei secvențe de caractere care nu se imprimă: \]

    Deci, dacă doriți să adăugați data și ora la promptul dvs. Bash și să puneți directorul de lucru pe comandă pe oa doua linie, puteți utiliza următoarea construcție:

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

    Parantezele pătrate de aici nu sunt deloc necesare, dar vă ajută să spargeți lucrurile vizibil și să faceți linia mai ușor de citit. Așa cum am acoperit mai devreme, puteți adăuga orice text sau caractere normale la variabila pe care o doriți, deci nu ezitați să utilizați ceea ce funcționează pentru dvs..

    Există un truc mai puternic pe care ar trebui să știți: Puteți adăuga ieșirea oricărei comenzi la prompt. Ori de câte ori apare promptul, Bash va executa comanda și va completa informațiile actuale. Pentru aceasta, includeți orice comandă pe care doriți să o executați între două ' de caractere. Nu este un apostrof - acesta este accentul grav, care apare deasupra tastei Tab de pe tastatură.

    De exemplu, să presupunem că doriți să vedeți versiunea kernelului Linux în prompt. Ați putea folosi o linie precum:

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

    Ca un alt exemplu, să presupunem că doriți să vizualizați durata de funcționare a sistemului și media de încărcare, așa cum este afișat de către timpul de funcționare comanda. Ați putea folosi următoarea construcție, care pune uptime-ul pe propria linie înainte de restul promptului.

    PS1 = "(" timpul de funcționare ") \ n \ u @ \ h: \ w $"

    Simțiți-vă liber să experimentați diferite caractere și comenzi speciale pentru a vă asambla promptul de comandă ideal.

    Cum se adaugă culorile în Bash Prompt

    După ce ți-ai dat seama de promptul tău preferat, poți adăuga culori la el. Acest lucru este de fapt foarte simplu, dar face ca variabila să arate uluitoare și complicată dacă nu înțelegeți la ce vă uitați.

    De exemplu, variabila implicită de culoare dorită de la începutul anului a fost:

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

    Sau, eliminarea din nou a biților debian_chroot:

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

    Aceasta este de fapt doar \ U @ \ h: \ w $ variabilă de la început, dar cu informații de culoare. Într-adevăr, îl putem descompune în câteva secțiuni:

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

    Prima secțiune este \ U @ \ h bit, precedat de informații de culoare care o transformă în verde. Al doilea este : caracter, precedat de informații de culoare care elimină orice culoare. Al treilea este \ w bit, precedată de informații de culoare care o transformă în albastru. Al patrulea este \ $ bit, precedat de informații de culoare care elimină orice culoare.

    Odată ce ați înțeles cum să construiți propriile etichete de culoare, puteți adăuga culorile dorite oricăror secțiuni din linia Bash dorită.

    Iată ce trebuie să știți: Trebuie să includeți întreaga informație despre codul de culoare între \ [  și \] caracters. În interiorul etichetei, trebuie să începeți cu oricare dintre ele \ 033 [ sau \ E [ pentru a indica Bash-ului că aceasta este o informație despre culoare. Ambii \ 033 [ și \ E [ face același lucru. \ E [ este mai scurtă, astfel încât ar putea fi mai convenabil de utilizat, dar vom folosi \ 033 [ aici, deoarece se potrivește cu ceea ce este folosit în mod implicit. La sfârșitul etichetei, trebuie să terminați m \ pentru a indica sfârșitul unei etichete de culoare.

    Încadrați-vă în jos, iată ce va arăta fiecare etichetă de culoare. Singura diferență este informațiile pe care le adăugați în locul culorii pentru a defini culoarea reală:

    \ [\ 033 [CULOAREm \]

    Bash vă permite să modificați culoarea textului din prim-plan, să adăugați atribute ca "bold" sau "underline" la text și să setați o culoare de fundal.

    Iată valorile pentru textul în prim plan:

    • Negru: 30
    • Albastru: 34
    • Cyan: 36
    • Verde: 32
    • Violet: 35
    • Roșu: 31
    • Alb: 37
    • Galben: 33

    De exemplu, din moment ce textul violet este codul de culoare 32, îl veți folosi \ [\ 033 [32m \]  pentru textul purpuriu.

    De asemenea, puteți specifica un atribut pentru text. Acest atribut trebuie adăugat înainte de numărul de culoare, separat printr-o punct și virgulă (;). Textul cu aceste atribute va arăta diferit în emulatorii de terminale diferiți.

    Iată valorile pentru atributele de text:

    • Text normal: 0
    • Text bold sau ușor: 1 (Depinde de emulatorul terminalului.)
    • Dim Text: 2
    • Text subliniat: 4
    • Text mișcare: 5 (Acest lucru nu funcționează în majoritatea emulatorilor de terminale.)
    • Text inversat: 7 (Acest lucru inversează culorile primului și fundalului, astfel încât veți vedea textul negru pe fundal alb dacă textul actual este text alb pe fundal negru.)
    • Text ascuns: 8

    De fapt, nu trebuie să includeți atributul text normal. Asta e implicit, oricum.

    De exemplu, din moment ce textul roșu este codul 31 și textul cu caractere aldine este codul 1, îl veți folosi \ [\ 033 [1; 31m \] pentru text roșu îndrăzneț.

    De asemenea, puteți specifica o culoare de fundal, dar nu puteți adăuga un atribut la o culoare de fundal.

    Iată valorile pentru culorile de fundal:

    • Fundal negru: 40
    • Fundal albastru: 44
    • Fundal de cian: 46
    • Fundal verde: 42
    • Fundal violet: 45
    • Fundal roșu: 41
    • Fundal alb: 47
    • Fundal galben: 43

    De exemplu, deoarece un fundal albastru este codul 44, \ [\ 033 [44m \] ar specifica un fundal albastru.

    Puteți specifica atât etichetele pentru fundal, cât și pentru culoarea de fundal. De exemplu, 42 reprezintă un fundal verde și 31 reprezintă text roșu. Deci, pentru a face ca promptul implicit să devină text roșu pe fundal verde, utilizați:

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

    Doar specificăm o singură culoare de fundal și apoi o singură culoare de text în prim plan, care începe de la începutul promptului și se aplică întregului text din prompt. Cu toate acestea, aveți posibilitatea să specificați cât mai multe etichete de culori, după cum doriți, în variabila, pentru a colora diferite secțiuni ale mesajului dorit, oricum doriți.

    Culorile textului de fundal și a primului text continuă să treacă dincolo de solicitare, cu excepția cazului în care specificați codul de culoare 00, clarificați informațiile despre culoare. De asemenea, puteți utiliza această etichetă în cadrul variabilei pentru a reseta formatarea înapoi la valoarea implicită undeva în solicitarea dvs. De exemplu, următoarea linie va încheia toate colorările înainte de \ $ caracter.

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

    Cum să setați noul dvs. Prompt implicit

    Odată ce ați terminat experimentarea cu culori, ar trebui să aveți un prompt Bash pe care îl doriți în sesiunea curentă. Dar probabil că doriți să faceți acest nou prompt permanent, astfel încât acesta să fie utilizat automat în toate sesiunile dvs. Bash.

    Pentru a face acest lucru, trebuie doar să modificați conținutul variabilei PS1 din fișierul .bashrc, la care ne-am uitat mai devreme.

    Deschideți fișierul .bashrc în editorul de text preferat, după cum urmează:

    nano ~ / .bashrc

    Derulați în jos și localizați secțiunea PS1 =. Doar înlocuiți variabila implicită cu variabila personalizată. Probabil doriți să părăsiți $ Debian_chroot: + ($ debian_chroot)  doar biți - nu vor apărea decât dacă sunteți într-un mediu chroot, oricum.

    Introduceți variabila PS1 colorată sub dacă ["$ color_prompt" = da]; atunci linia. Introduceți variabila fără culori sub altfel linia.

    Salvați fișierul și închideți editorul de text. De exemplu, pentru a salva fișierul în nano, apăsați Ctrl + O, apăsați Enter și apoi apăsați Ctrl + X pentru a ieși.

    Data viitoare când porniți o nouă coajă Bash - de exemplu, conectându-vă la terminal sau deschizând o fereastră nouă a terminalului, veți vedea promptul dvs. personalizat.