De flesta Linux-distributioner konfigurerar Bash-prompten så att den ser ut som
användarnamn @ värdnamn: katalog $
. Men du kan konfigurera Bash-prompten så att den innehåller vad du vill och till och med välja vilka färger du vill.
Exempelstegen här utfördes på Ubuntu 16.04 LTS. Processen ska vara densamma vid andra Linux-distributioner, även om standard Bash-prompten och inställningarna i .bashrc-filen kan vara lite annorlunda.
Där den snabba variabeln lagras
Din konfiguration av Bash-prompt sparas i ditt användarkontos .bashrc-fil, som är på
~ / .bashrc
. Så om ditt användarnamn är bob är filen på
/home/bob/.bashrc
.
Du kan öppna filen för att visa den aktuella Bash-variabeln. Vi använder nano som vårt exempeltextredigerare, även om du också kan använda vi , emacs eller någon annan textredigerare du är bekväm med. Öppna en terminal och kör:
nano ~ / .bashrc
Bläddra ner till
Ψ1 =
sektion. Den första variabeln ser ganska komplicerad ut eftersom den innehåller färginformation - det förklarar vi senare. Den andra variabeln, utan färginformation, har följande lydelse:
$ {debian_chroot:+($debian_chroot)} \ u @ \ h: \ w \ $
Detta är fortfarande lite komplicerat på grund av
${debian_chroot:+($debian_chroot)}
bitar. Dessa säger bara till Bash att meddela dig om du använder en Debian chroot-miljö och normalt inte visas. Ignorerar dessa, här är standardstrukturen för Bash-promptvariabeln:
\ u @ \ h: \ w \ $
\ u
anger ditt användarnamn,
@
indikerar @ -tecknet,
\ h
anger värdnamnet (datorns namn),
:
indikerar: karaktär,
\i
anger arbetskatalogen och
\$
anger $ om du är ett vanligt användarkonto eller # om du är root. Så att sätta ihop allt, förstår du
användarnamn @ värdnamn: working_directory $
.
För att ändra Bash-prompten måste du bara lägga till, ta bort eller ordna om specialtecken i PS1-variabeln. Men det finns många fler variabler som du kan använda än standardvarianterna.
Lämna textredigeraren för tillfället - i nano trycker du på Ctrl + X för att avsluta. Vi visar hur du experimenterar med variabler innan du faktiskt skriver en ny i din .bashrc-fil.
Hur man skapar en anpassad Bash-fråga
Din Bash-promptkonfiguration lagras i PS1-variabeln. För att spara innehållet i PS1-variabeln i en ny variabel, kör följande kommando:
STANDARD = $ PS1
Du kan nu ställa in PS1-variabeln till olika värden för att experimentera. Till exempel skulle den första raden här ställa in din uppmaning till en grundläggande "user $" -prompt, medan den andra skulle ställa in din prompt till en grundläggande "user: working_directory $" -prompt.
PS1 = "\ u \ $" PS1 = "\ u: \ w \ $"
Om du någonsin vill komma tillbaka till din standardprompt, kör bara följande kommando.
PS1 = $ STANDARD
Bash återställs till standardprompten tack vare att du sparade standardinställningarna tidigare. Observera att alla ändringar du gör här endast är tillfälliga för den aktuella Bash-sessionen, så du kan alltid logga ut och logga in eller stänga och öppna terminalfönstret igen för att gå tillbaka till din standardprompt. Men ovanstående rad gör det möjligt att enkelt komma tillbaka till din standard Bash-prompt utan besväret med att logga ut eller stänga ett fönster.
Du kan lägga till valfri tecken eller text i variabeln. Så för att prefixa "Hello World" till standardprompten kan du använda:
PS1 = "Hello World \ u @ \ h: \ w \ $"
Nu när du har grunderna nere behöver du bara veta vad alla specialtecken är. Du bryr dig troligen inte om många av dessa, men här är hela listan som den visas i Bash-manualen :
-
En klocktecken:
\ a -
Datumet i formatet "Veckodag månad" (t.ex. "tis 26 maj"):
\ d -
Formatet skickas till strftime (3) och resultatet infogas i snabbsträngen; ett tomt format resulterar i en lokalspecifik tidsrepresentation. Hängslen krävs:
\ D{format} -
En flyktkaraktär:
\är -
Värdnamnet, upp till första '.':
\ h -
Värdnamnet:
\ H -
Antalet jobb som för närvarande hanteras av skalet:
\ j -
Basnamnet på skalets terminalenhetsnamn:
\ l -
En ny linje:
\ n -
En vagnretur:
\ r -
Skalets namn, basnamnet $ 0 (delen som följer den sista snedstrecket):
\ s -
Tiden, i 24-timmars HH: MM: SS-format:
\ t -
Tiden, i 12-timmars HH: MM: SS-format:
\ T -
Tiden, i 12-timmars am / pm-format:
\@ -
Tiden, i 24-timmars HH: MM-format:
\ A -
Användarnamnet för den nuvarande användaren:
\ u -
Versionen av Bash (t.ex. 2.00):
ev -
Släpp av Bash, version + patchlevel (t.ex. 2.00.0):
EV -
Den nuvarande arbetskatalogen, med $ HOME förkortad med en tilde (använder variabeln $ PROMPT_DIRTRIM):
\i -
Basnamnet på $ PWD, med $ HOME förkortat med en tilde:
\I -
Historiknumret för detta kommando:
\! -
Kommandonumret för detta kommando:
\# -
Om den effektiva uid är 0, #, annars $:
\$ -
Tecknet vars ASCII-kod är det oktala värdet nnn:
\ nnn -
Ett motsatt snedstreck:
\\ -
Börja en sekvens av tecken som inte skrivs ut. Detta kan användas för att bädda in en terminalstyrningssekvens i prompten:
\[ -
Avsluta en sekvens av tecken som inte skrivs ut:
\]
Så om du vill lägga till datum och tid till din Bash-prompten och sätta arbetskatalogen på kommando på en andra rad kan du använda följande konstruktion:
PS1 = "[\d \t] \ u @ \ h \ n \ w \ $"
Hakparenteserna här är inte nödvändiga alls, men hjälper till att bryta upp saker visuellt och göra raden lättare att läsa. Som vi täckte tidigare kan du lägga till vilken text eller vanliga tecken som helst i variabeln du gillar, så använd gärna det som fungerar för dig.
Det finns ett mer kraftfullt knep du borde veta om: Du kan lägga till utdata från valfritt kommando i prompten. När prompten visas kommer Bash att köra kommandot och fylla i aktuell information. För att göra detta, inkludera bara vilket kommando du vill köra mellan två
`
tecken. Det är inte en apostrof - det är den allvarliga accenten, som visas ovanför Tab-tangenten på tangentbordet.
Låt oss till exempel säga att du vill visa Linux-kärnversionen i prompten. Du kan använda en rad som följande:
PS1 = "\ u @ \ h på ʻuname -s -r` \ w \ $"
Som ett annat exempel, låt oss säga att du vill se systemets driftstid och belastningsmedelvärde, som visas av
drifttid
kommando. Du kan använda följande konstruktion, som sätter driftstiden på sin egen linje före resten av prompten.
PS1 = "(ʻuptime`) \ n \ u @ \ h: \ w $"
Experimentera gärna med olika specialtecken och kommandon för att montera din perfekta kommandotolk.
Hur man lägger till färger i din Bash-fråga
När du har räknat ut din önskade fråga kan du lägga till färger i den. Detta är faktiskt väldigt enkelt, men det får variabeln att se väldigt rörigt och komplicerat ut om du inte förstår vad du tittar på.
Till exempel var standardvariabeln för färgprompt från tidigare:
$ {debian_chroot:+($debian_chroot)} \ [\033[01;32m\] \ u @ \ h \ [\033[00m\]: \ [\033[01;34m\] \ w \ [\033[00m\] \ $
Eller ta bort debian_chroot-bitarna igen:
\ [\033[01;32m\] \ u @ \ h \ [\033[00m\]: \ [\033[01;34m\] \ w \ [\033[00m\] \ $
Detta är faktiskt bara
\ u @ \ h: \ w $
variabel från tidigare men med färginformation. Egentligen kan vi dela upp det i några avsnitt:
\[\033[01;32m\]\ u @ \ h\[\033[00m\]:\[\033[01;34m\]\i\[\033[00m\]\$
Det första avsnittet är
\ u @ \ h
bit, föregås av färginformation som blir grön. Den andra är
:
föregås av färginformation som tar bort alla färgämnen. Den tredje är
\i
bit, föregås av färginformation som blir blå. Den fjärde är den
\$
bit, föregås av färginformation som tar bort alla färgämnen.
När du väl har förstått hur du skapar egna färgtaggar kan du lägga till vilka färger du vill i de delar av din Bash-fråga du vill.
Här är vad du behöver veta: Du måste inkludera hela färgkodinformationen mellan
\[
och
\] karaktär
s. Inuti taggen måste du börja med endera
\033[
eller
\är[
för att indikera för Bash att detta är färginformation. Både
\033[
och
\är[
gör samma sak.
\är[
är kortare så det kan vara bekvämare att använda, men vi använder det
\033[
här eftersom det matchar det som används som standard. I slutet av taggen måste du sluta med
m \
för att ange slutet på en färgtagg.
Fördelar det här, så här ser alla färgmärken ut. Den enda skillnaden är den information du lägger till i stället för FÄRG för att definiera den faktiska färgen:
\[\033[FÄRGm \]
Med Bash kan du ändra färgen på förgrundstexten, lägga till attribut som "fet" eller "understruken" till texten och ställa in en bakgrundsfärg.
Här är värdena för förgrundstext:
- Svart: 30
- Blå: 34
- Cyan: 36
- Grön: 32
- Lila: 35
- Röd: 31
- Vit: 37
- Gul: 33
Till exempel, eftersom lila text är färgkod 32, skulle du använda
\[\033[
32
m \]
för lila text.
Du kan också ange ett attribut för texten. Detta attribut måste läggas till före färgnumret, åtskilt av semikolon (;). Text med dessa attribut kommer att se annorlunda ut i olika terminalemulatorer.
Här är värdena för textattribut:
- Normal text: 0
- Fet eller lätt text: 1 (Det beror på terminalemulator.)
- Dim text: 2
- Understruken text: 4
- Blinkande text: 5 (Detta fungerar inte i de flesta terminalemulatorer.)
- Omvänd text: 7 (Detta inverterar förgrunds- och bakgrundsfärgerna, så du ser svart text på en vit bakgrund om den aktuella texten är vit text på en svart bakgrund.)
- Dold text: 8
Du behöver faktiskt inte inkludera det normala textattributet. Det är ändå standard.
Till exempel, eftersom röd text är kod 31 och fet text är kod 1, skulle du använda
\[\033[
1;31
m \]
för fet röd text.
Du kan också ange en bakgrundsfärg, men du kan inte lägga till ett attribut till en bakgrundsfärg.
Här är värdena för bakgrundsfärger:
- Svart bakgrund: 40
- Blå bakgrund: 44
- Cyan bakgrund: 46
- Grön bakgrund: 42
- Lila bakgrund: 45
- Röd bakgrund: 41
- Vit bakgrund: 47
- Gul bakgrund: 43
Till exempel, eftersom en blå bakgrund är kod 44,
\[\033[
44
m \]
skulle ange en blå bakgrund.
Du kan ange både förgrunds- och bakgrundsfärgstaggar. Till exempel representerar 42 en grön bakgrund och 31 representerar röd text. Så, för att standardprompten ska bli röd text på en grön bakgrund, använder du:
Ψ1 = "\ [\ 033 [42m \] \ [\ 033 [31m \] \ u @ \ h: \ w \ $ "
Vi anger bara en enda bakgrundsfärg och sedan en enda förgrundstextfärg här, som börjar i början av prompten och tillämpas på all text i prompten. Du kan dock ange så många färgtaggar som du vill i variabeln för att färga olika delar av din uppmaning hur du vill.
Bakgrunds- och förgrundstextfärgerna fortsätter förbi prompten såvida du inte anger färgkod 00 rensar färginformationen. Du kan också använda den här taggen i variabeln för att återställa formateringen till standard någonstans i din fråga. Till exempel skulle följande rad avsluta all färgning före
\$
karaktär.
Ψ1 = "\ [\ 033 [42m \] \ [\ 033 [31m \] \ u @ \ h: \ w \\ [\ 033 [00m \] \ $ "
Hur du ställer in din nya standardprompt
När du är klar med att experimentera med färger bör du ha en Bash-prompten som du gillar under den aktuella sessionen. Men du vill antagligen göra den nya prompten permanent så att den automatiskt används i alla dina Bash-sessioner.
För att göra detta behöver du bara ändra innehållet i PS1-variabeln i .bashrc-filen, som vi tittade på tidigare.
Öppna .bashrc-filen i önskad textredigerare, så här:
nano ~ / .bashrc
Rulla ner och leta reda på avsnittet PS1 =. Byt bara standardvariabeln med din anpassade variabel. Du vill nog lämna
${debian_chroot:+($debian_chroot)}
bitar ensamma, dock - de visas inte om du inte befinner dig i en chrot-miljö.
Ange din färgade PS1-variabel under
om [ "$color_prompt" = yes ]; sedan
linje. Ange variabeln utan färger under
annan
linje.
Spara filen och stäng din textredigerare. Om du till exempel vill spara filen i nano trycker du på Ctrl + O, trycker på Enter och sedan på Ctrl + X för att avsluta.
Nästa gång du startar ett nytt Bash-skal - till exempel genom att logga in på terminalen eller genom att öppna ett nytt terminalfönster - ser du din anpassade fråga.