Hvordan lage en Fancy og Nyttig Bash Tekst i Linux

Vi kan programmere vår ydmyke Bash ledeteksten for å vise alle typer nyttig informasjon, og ganske det opp også. Vi sitter der stirrer på våre datamaskiner hele dagen lang, så hvorfor ikke gjøre det ser fint? Vi vil lære hvordan du raskt teste nye konfigurasjoner og raskt reversere dem, hvordan lage fine farger, hvordan du kan vise ulike typer informasjon, tilpasse den til ulike brukere, og lage en multi-linjen spør.

Konfigurering av et annerledes meldingen for SSH-økter er en av mine favoritter, fordi det har reddet meg fra mange feil på grunn av å kjøre en kommando i feil terminal. En kjedelig liv uten ødelagte servere er ikke for mye å be om. Bare legg disse linjene til ~ /.bashrc av bruker på den eksterne maskinen:

 hvis [-n "$ SSH_CLIENT"]; deretter text = "ssh-session" fiexport PS1 = '\\ [\\ e [1; 32m \\] \\ u @ \\ h: \\ w $ {tekst} $ \\ [\\ e [m \\]' 

Så laste endringer uten å logge ut:

 $ source ~ /.bashrc 

Nå åpner en SSH-økt fra en annen maskin, og du vil se noe lignende figur 1.


Du kan til og med gjøre alt dette over SSH, slik at du ikke trenger å stå opp.

Farger

Selvfølgelig kan du velge mellom en rekke flotte ANSI farger. Du kan finne ANSI fargekode listene over alt. Dette er de grunnleggende farger:

 0; 30m Black0; 31m Red0; 32m Green0; 33m Yellow0; 34m Blue0; 35m Purple0; 36m Cyan0; 37m Hvit 

0 er normal skrift. Endre 0 til 1 for fet, 4 for understreking, og 5 for sakte blink. I SSH eksempel text = "ssh-session" er uansett tekststreng du vil, og teksten etiketten er også vilkårlig, så lenge det sams $ {tekst}.

bash shell støtter en rekke spesial tegn for å tilpasse teksten. For eksempel \\ u er brukernavnet, og \\ h er vertsnavnet. Andre nyttige spesialtegn er:

 \\ d: datoen i "Weekday Måned Date" format \\ t: gjeldende tid i 24-timers HH: MM: SS format \\ w: gjeldende arbeidskatalog \\ s: navnet på shell \\ n: linjeskift \\ [: begynne en sekvens av ikke-utskrift tegn, for innebygging en terminal kontroll sekvens i meldingen \\]: avslutte en sekvens av ikke-utskrift tegn 

Dine tilpasset rask sekvenser er vanskelig å lese på grunn av alle de rømming, men du får taket på det med litt øvelse. Legg merke til hvordan hele sekvensen er i enkle anførselstegn, og det begynner etter PS1 =. \\ u @ \\ h: er et eksempel på hvordan du setter inn skilletegn etter spesialtegn. Bokstavelige skilletegn er ikke rømt. Du kan sette inn mellomrom på samme måte; for eksempel, kan du se den avsluttende fargekode, \\ [\\ e [m \\] ", som har et mellomrom etter siste hakeparentes. Dette skaper et mellomrom etter dollartegn. Dette eksempelet viser også hvordan du tilbakeskriftfargen tilbake til terminalen standard. I det neste eksempelet ser du hvordan du skal sette en egendefinert skriftfarge på høyre side av meldingen.

Dette eksemplet oppretter et hyggelig cyan spørsmål med dato og tid (figur 2). Merk også hvordan du kan legge hakeparenteser rundt teksten, eller deler av det, ved å kapsle de spesielle tegn med un-rømt parentes:

 $ PS1 = '\\ [\\ e [1; 34m \\] [ ,,,0],\\ d \\ t \\ u @ \\ h \\ w] \\ $ \\ [\\ e [m \\] '


Du kan gå nøtter med farger (figur 3):

 $ PS1 = '\\ [\\ e [1; 36m \\] \\ d \\ [\\ e [1; 32m \\] \\ t \\ [\\ e [1; 33m \\] \\ u @ \\ [\\ e [1; 35m \\] \\ h: \\ w \\ $ \\ [\\ e [0; 31m \\] '


Å sette en fargekode på slutten, som \\ [\\ e [0; 31m \\], setter en tilpasset farge på alt du skriver, og alt annet som vises etter meldingen.

flere linjer Prompt

De fleste terminaler er 80 tegn bredt, slik at du går ut av rommet når du har en lang rask . Så hvorfor ikke bryte opp linjene? Du kan med vår gamle venn linjeskift spesialtegn, \\ n:

 PS1 = '\\ [\\ e [1; 33m \\] \\ u @ \\ h \\ w - > \\ n \\ [\\ e [ ,,,0],1; 36m \\] \\ @ \\ d \\ $ \\ [\\ e [m \\] '

Dette skaper et fint spørsmål med brukernavn, gjeldende katalog, og tid og dato (figur 4). Den har en pil som viser det er en annen linje, og det ender i en skikkelig dollartegn for en svakstilte bruker.



Root Spør

Roten teksten er angitt med hash mark, #. Så lenge vi gjør fancy meldingene, hvorfor ikke lage en til root brukeren også? Legg til disse linjene til både din ~ /.bashrc, og til root sin /root /.bashrc:

 hvis [$ (id -u) -eq 0]; deretter PS1 = '\\ [\\ e [1; 36m \\] [\\ d \\ t \\ u @ \\ h \\ w] \\ $ \\ [\\ e [m \\] 'annet PS1 =' \\ [\\ e [1; 33m \\] [\\ d \\ t \\ u @ \\ h \\ w] \\ $ \\ [\\ e [m \\] 'fi 

​​Du kan enten sudo eller su til root, deretter kilde ~ /.bashrc, og nyt root nye fancy teksten. Du kan fancy opp root prompt akkurat som for alle brukere. En rask måte å sjekke hvilken som helst brukers ID-nummer er med ID-kommando:

$ id -u

Sett en formue i Prompt

Husk vei tilbake da vi hadde satt en Snakker Cow i Linux Message of the Day? Du kan også sette en i din Bash ledetekst ved å legge til denne linjen i ~ /.bashrc ::

 [["$ PS1"]] & & /usr /games /formue | /usr /spill /cowsay -n 



~ /.bashrc Gotchas

Hvis det ikke er en ~ /.bashrc deretter opprette en. På de fleste distroer er det hentet fra ~ /.profile, som du kan kontrollere ved å se etter noe sånt som disse linjene i ~ /.profile:

 # hvis du kjører bashif [-n "$ BASH_VERSION"]; deretter # inkluderer .bashrc hvis den finnes hvis [-f "$ HOME /.bashrc"]; da\t. "$ HOME /.bashrc" fifi 

​​Hvis din spesielle smaken av Linux bruker ikke ~ /.profile, så se etter ~ /.bash_profile eller ~ /.bash_login. Hvis den ikke har de da har du en merkelig Linux, og må ta kontakt med distro dokumentasjon for å finne ut hva de skal gjøre.

Feeling tapt? Du kan sende dine nåværende rask innstillinger.

 $ echo $ PS1 

Det er noe sånt som en milliard og tolv måter å rote med din Bash prompt, så besøk Bash Reference Manual for å lære alt om det