Slik tilpasser du kommandoprompt

Jeg er en stor fan av terminalen: om du bruker en håndfull kommandoer (eller mer!) For å forbedre utviklingsprosessen, eller bare bruke den til å raskt flytte rundt stasjonene dine og åpne filer og mapper, er kommandolinjen et fantastisk verktøy. Men hvis du bruker det ofte, vil du ønske å tilpasse det til dine behov. Jeg skal vise deg hvordan du gjør det i dag!

Jeg blir ofte spurt, "Hvordan fikk du ledeteksten din til å se slik ut?" Vel, i denne veiledningen vil jeg vise deg nøyaktig hvordan du gjør det. Det er ganske enkelt, og vil ikke kreve for mye av tiden din.

Jeg bør merke at det jeg viser deg, er spesielt for bash-skallet; Dette er standardskallet på Mac og de fleste Linux-systemer. Hvis du vil ha en bash-melding på Windows, vil du kanskje sjekke ut Cygwin.


Hvordan virker det?

Før vi begynner, la oss snakke et øyeblikk om hvordan du tilpasser bash-spørringen. Det er ikke helt det samme som du er vanlig søknad: det er ingen preferanser panel. Tilpasningene dine lagres i en fil. Hvis du er på Linux (eller bruker Cygwin), blir det din .bashrc fil; på Mac, det er din .bash_profile fil. I begge tilfeller holdes denne filen i din hjemmekatalog (hvis du ikke er sikker på hvor det er for en Cygwin-installasjon, kjør kommandoen ekko $ HOME). Legg merke til at jeg bare refererer til .bashrc filen herfra, men bruk .bash_profile hvis du er på en Mac.

Merk at på Mac-maskiner (og muligens Linux-maskiner, jeg er ikke sikker), er filer som begynner med en periode, gjemt som standard. For å vise dem, kjør disse to linjene i terminalen

standardinnstillinger skriv com.apple.finder AppleShowAllFiles TRUE killall Finder

Så, hva går i det .bashrc fil? Hver linje er faktisk en kommando som du kan kjøre på kommandolinjen. Faktisk, det er slik disse konfigurasjonsfilene fungerer: Når du åpner konsollen, kjøres alle kommandoene du har skrevet i config-filen, og konfigurerer miljøet ditt. Så, hvis du bare vil prøve ut noe av det jeg skal vise nedenfor, skriver du det bare på kommandolinjen selv. Enkelheten her er vakker.


Tilpasse PS1

La oss starte med en definisjon. De prompt er det du ser på begynnelsen av linjen, hver gang du trykker på enter på kommandolinjen. Her er standardinnstillingene for Mac:

I dette tilfellet er spørringen andrews-macbook: ~ screencast $. Det er noen variabler her: andrew-macbook er navnet på denne datamaskinen, ~ er den nåværende katalogen (hjemmekatalogen) og screen er brukernavnet. La oss tilpasse dette litt.

Åpne opp enten din .bashrc fil. Måten vi angir hvilken informasjon som vises i spørringen, er med PS1 variabel. Legg til dette i filen:

PS1 = '->'

Legg merke til at jeg ikke legger mellomrom på hver side av like tegn; det er nødvendig. Lagre denne filen i din hjemmekatalog, og åpne et terminalvindu. Nå bør du få en melding som ser slik ut:

Jeg merker her at hvis du synes det er kjedelig å lukke og åpne din terminal hver gang du gjør en endring til din .bashrc eller .bash_profile, Det er litt av en snarvei: Du kan laste inn noen bash tilpasningsfil med kilde kommando. Kjør dette i terminalen din:

kilde ~ / .bashrc

Fortsatt for lenge? Vel, en enkelt periode (.) er et alias for kilde. Glad nå? Hvis du er rask, vil du innse at vi kan bruke kilde kommandoen for å inkludere andre filer i vår .bashrc fil, hvis du vil dele det opp for å holde deg under kontroll.

La oss tilpasse våre spørsmål litt mer. Vi kan bruke innebygde variabler i strengen vi tilordner PS1 å inkludere nyttig informasjon i spørringen; her er noen nyttige en:

  • \ d: Dato
  • \ h: Vert
  • \ n: Ny linje
  • \ t: Tid
  • \ u: Brukernavn
  • \ W: Gjeldende arbeidskatalog
  • \ w: Full sti til gjeldende katalog

Så, hvis du stiller spørsmål til dette:

PS1 = '\ n \ V \ n [\ h] [\ u] ->'

du bør se noe slikt:

Legg merke til noen ting her: For det første bruker vi en rekke variabler som vist ovenfor for å gi oss mer informasjon. Men for det andre inkluderer vi noen få nye linjer der inne, og får en mer interessant melding: Vi har den nåværende katalogen på en linje, og deretter den faktiske spørringen på neste linje. Jeg foretrekker spørringen min på denne måten, fordi jeg alltid har samme mengde plass til å skrive mine kommandoer, uansett hvor lenge banen til gjeldende katalog er. Det er imidlertid en bedre måte å gjøre dette på, så la oss se på det nå.


Tilpasse PROMPT_COMMAND

Den bedre måten å gjøre dette på er å bruke PROMPT_COMMAND variabel; innholdet i denne variabelen er ikke bare en streng, som med PS1. Det er faktisk en kommando som kjøres før bash viser spørringen. For å prøve dette, la oss legge til dette i vår .bashrc:

PROMPT_COMMAND = 'echo' kommer før spørringen ''

Vi bruker ekko kommandoen her; Hvis du ikke er kjent med det, sender du bare en streng, og den vil skrive den til terminalen. I seg selv er det ikke utrolig nyttig (selv om du kan bruke den til å vise variabler: ekko $ PS1), men det er flott når det brukes med andre kommandoer, så vis utgangene sine. Hvis du har lagt til linjen over, bør du se dette:

La oss gjøre noe mer nyttig her. La oss skrive en bash-funksjon som vi vil tilordne til PROMPT_COMMAND. Prøv dette:

print_before_the_prompt () echo "kommer før spørringen" PROMPT_COMMAND = print_before_the_prompt

Hvis du bruker dette, bør du ikke se en forskjell i spørringen fra det vi har over. La oss nå gjøre dette nyttig.

print_before_the_prompt () echo "$ BRUKER: $ PWD" PROMPT_COMMAND = print_before_the_prompt PS1 = "->"

Her er hva du får:

Det er en god start, men jeg vil gjøre litt mer. Jeg skal bruke printf kommando i stedet for ekko fordi det gjør det enklere å inkludere nye linjer og variabler. En rask bakgrunn på printf kommando: det tar flere paramters, den første er en slags mal for strengen som vil bli utgitt. De andre parameterne er verdier som vil bli erstattet i malstrengen når det er hensiktsmessig; vi får se hvordan dette fungerer.

Så la oss gjøre dette:

print_before_the_prompt () printf "\ n% s:% s \ n" "$ USER" "$ PWD"

Se dem % s deler der inne? Det betyr at du tolker verdien for dette stedet som en streng ?; for kontekst kan vi også bruke % d å formatere verdien som et desimalnummer. Som du kan se, har vi to % ss i "mal"? streng og to andre parametere. Disse vil bli plassert i strengen der % ss er. Legg også merke til nybegynnene i begynnelsen og slutten: den første gir bare terminalen noen puste rom. Den siste sørger for at spørringen (PS1) skrives ut på neste linje, og ikke på samme linje som PROMPT_COMMAND.

Du bør få en terminal slik:


Legger til litt farge

Ser bra ut! Men la oss ta det et skritt lenger. La oss legge til litt farge på dette. Vi kan bruke noen spesielle koder for å endre fargen på teksten i terminalen. Det kan være ganske skremmende å bruke den faktiske koden, så jeg liker å kopiere denne listen over variabler for fargen og legge den til øverst på min .bashrc fil:

txtblk = '\ e [0; 30m' # Svart - Vanlig txtred = "\ e [0; 31m" # Rød txtgrn = "\ e [0; 32m" # Grønn txtylw = "\ e [0; 33m" # Gul txtblu = "\ e [0; 34m" # Blå txtpur = "\ e [0; 35m" # Purple txtcyn = "\ e [0; 36m" # Cyan txtwht = "\ e [0; 37m" # Hvit bldblk = "# 1; 30m" # Black - Bold bldred = "\ e [1; 31m" # Rød bldgrn = "\ e [1; 32m" # Grønn bldylw = "\ e [1; 33m" # Gul bldblu = [1; 34m "# Blå bldpur =" \ e [1; 35m "# Lilla bldcyn =" \ e [1; 36m "# Cyan bldwht =" \ e [1; 37m "# Hvit unkblk =" \ e [4; 32m "# Grønn undylw =" \ e [4; 33m "# Gul undblu =" \ e [4; 31m "# Rød undgrn = e [4; 34m "# Blå undpur =" \ e [4; 35m "# Purple undcyn =" \ e [4; 36m "# Cyan undwht =" \ e [4; 37m "# Hvit bakblk =" \ e [ 40m "# Black - Bakgrunn bakred =" \ e [41m "# Red badgrn =" \ e [42m "# Green bakylw =" \ e [43m "# Gul bakblu =" \ e [44m "# Blå bakpur =" \ e [45m "# Lilla bakcyn =" \ e [46m "# Cyan bakwht =" \ e [47m "# Hvit txtrst =" \ e [0m "# Tekst Tilbakestill

Det er noen metode for denne galskapen: Det første settet er slått på normal farging. Det andre settet slår på fargestoffer. Det tredje settet slår på understreket farger. Og det fjerde settet slår på bakgrunnsfarger. Den siste resetter fargingen til normal. Så, la oss bruke disse!

print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s \ n $ txtrst" "$ USER" "$ PWD"

Her har jeg lagt til $ txtred før den første % s, og $ bldgrn før den andre % s; da, på slutten, har jeg tilbakestilt tekstfargen. Du må gjøre dette fordi når du har satt en farge, vil den holde til du enten bruker en ny farge eller tilbakestill fargen. Du vil også legge merke til at når du angir en variabel, forkaster vi ikke det med et dollarskilt; men vi bruker dollartegnet når du bruker variabelen: det er måten bash-variabler fungerer. Dette gir oss følgende:

La oss gå videre til det siste trinnet: legge til noen skript for å gi oss enda mer informasjon.


Legge til Versjonskontrollinformasjon

Hvis du har sett screencasts som følger med boken Kom godt med Git, kan du huske at jeg har litt versjonskontrollinformasjon som vises i min melding. Jeg fikk denne ideen fra den utmerkede PeepCode? Advanced Command Line? screencast, som deler dette, samt mange andre gode tips.

For å gjøre dette, må vi laste ned og bygge skriptet som finner denne informasjonen. Gå videre til lageret for vcprompt, et skript som utgir versjonskontrollinformasjonen. Hvis du er kjent med Mercurial-versjonens kontrollsystem, kan du bruke det for å få repoen, men du vil mest sannsynlig treffe den "zip" -linken for å laste ned skriptkoden som en zip-fil. Når du pakker ut den, må du bygge skriptet. For å gjøre dette, bare cd Gå inn i den upakket skriptmappen og kjør kommandoen gjøre. Når denne kommandoen kjører, bør du se en fil som heter 'vcprompt' i mappen. Dette er det kjørbare skriptet.

Så, hvordan bruker vi dette i vår ledetekst? Vel, dette bringer opp en viktig kaninsti: hvordan installerer vi? et skript (som denne) slik at vi kan bruke det i terminalen? Alle kommandoene du kan kjøre på terminalen, finnes i en definert rekke mapper; dette arrayet er PATH-variabelen. Du kan se en liste over mappene som er i din PATH ved å kjøre ekko $ PATH. Det kan se slik ut:

/ Usr / bin: / bin: / usr / sbin: / sbin: / usr / local / bin: / usr / X11 / bin

Hva vi trenger å gjøre er å sette det eksekverbare skriptet vcprompt i en mappe som er i vår vei. Hva jeg liker å gjøre (og ja, jeg lærte dette trikset fra den PeepCode-skjermbildet også) lager en mappe som heter "bin" (kort for "binær") i min hjemmekatalog og legger den mappen til min PATH. Legg dette til din .bashrc:

eksporter PATH = ~ / bin: $ PATH

Dette setter PATH til ~ / Bin, pluss hva som allerede var i PATH-variabelen. Hvis vi setter det nå vcprompt skript i ~ / bin, vil vi kunne utføre det i hvilken som helst mappe på terminalen.

Så, la oss legge til dette på vår ledetekst:

print_before_the_prompt () printf "\ n $ txtred% s: $ bldgrn% s $ txtpur% s \ n $ txtrst" "$ USER" "$ PWD" "$ (vcprompt)"

jeg har lagt til $ txtpur% s til "mal"? streng, og lagt til den fjerde parameteren"$ (Vcprompt)". Ved å bruke dollarskiltet og parentesen utføres skriptet og returneres utgangen. Nå får du dette:

Legg merke til at hvis mappen ikke bruker noen form for versjonskontroll, vises ingenting. Men hvis vi er i et lager, får vi det versjonskontrollsystemet som blir brukt (Git, i mitt tilfelle) og grennavnet. Du kan tilpasse denne utdataen litt, hvis du vil: Kontroller Readme-filen du lastet ned med kildekoden for vcprompt manus.


Går videre!

Her er vår komplette .bashrc eller .bash_profile fil:

eksporter PATH = ~ / bin: $ PATH txtblk = "\ e [0; 30m" # Svart - Vanlig txtred = "\ e [0; 31m" # Rød txtgrn = "\ e [0; 32m" # Green txtylw = " [0; 33m "# Gul txtblu =" \ e [0; 34m "# Blå txtpur =" \ e [0; 35m "# Lilla txtcyn =" \ e [0; 36m "# Cyan txtwht =" \ e [0; 37m "# Hvit bldblk =" \ e [1; 30m "# Svart - Bold bldred =" \ e [1; 31m "# Rød bldgrn =" \ e [1; 32m "# Grønn bldylw =" \ e [1; 33m "# Gul bldblu =" \ e [1; 34m "# Blå bldpur =" \ e [1; 35m "# Lilla bldcyn =" \ e [1; 36m "# Cyan bldwht =" \ e [1 37m "# White unkblk =" \ e [4; 30m "# Black - Underline undred =" \ e [4; 31m "# Rød undgrn =" \ e [4; 32m "# Grønn undylw =" \ e [4 33m "# Gul undblu =" \ e [4; 34m "# Blå undpur =" \ e [4; 35m "# Purple undcyn =" \ e [4; 36m "# Cyan undwht =" \ e [4; 37m "# White bakblk =" \ e [40m "# Black - Bakgrunn bakred =" \ e [41m "# Red badgrn =" \ e [42m "# Grønn bakylw =" \ e [43m "# Gul bakblu =" \ e [44m "# Blue bakpur =" \ e [45m "# Purple bakcyn =" \ e [46m "# Cyan bakwht =" \ e [47m "# White txtrst =" \ e [0m "# Tekst Reset print_before_the_prompt printf "\ n $ txtred% s: $ bldgrn% s $ txtpur% s \ n $ txtrst" "$ USER" "$ PWD" "$ (vcprompt) " PROMPT_COMMAND = print_before_the_prompt PS1 =" -> "

Vel, det er et krasj-kurs på å tilpasse bash-prompten din. Hvis du har spørsmål, vær sikker på å slippe dem i kommentarene!