Anpassen (und Kolorieren) der Bash-Eingabeaufforderung
Die meisten Linux-Distributionen konfigurieren die Bash-Eingabeaufforderung so, dass sie ungefähr so aussieht Benutzername @ Hostname: Verzeichnis $
. Sie können die Bash-Eingabeaufforderung jedoch so konfigurieren, dass sie enthält, was Sie möchten, und sogar die Farben auswählen, die Sie möchten.
Die Beispielschritte wurden hier auf Ubuntu 16.04 LTS durchgeführt. Der Prozess sollte auf anderen Linux-Distributionen derselbe sein, obwohl die standardmäßige Bash-Eingabeaufforderung und die Einstellungen in der .bashrc-Datei etwas anders sein können.
Wo die Eingabeaufforderungsvariable gespeichert wird
Ihre Bash-Eingabeaufforderungskonfiguration wird in der .bashrc-Datei Ihres Benutzerkontos gespeichert ~ / .bashrc
. Wenn Ihr Benutzername bob lautet, ist die Datei um /home/bob/.bashrc
.
Sie können die Datei öffnen, um die aktuelle Bash-Variable anzuzeigen. Wir verwenden nano als Beispieltexteditor. Sie können jedoch auch vi, emacs oder einen beliebigen anderen Texteditor verwenden. Öffne ein Terminal und starte:
nano ~ / .bashrc
Scrollen Sie nach unten zu PS1 =
Sektion. Die erste Variable sieht ziemlich kompliziert aus, da sie Farbinformationen enthält. Wir erklären das später. Die zweite Variable ohne Farbinformationen lautet wie folgt:
$ debian_chroot: + ($ debian_chroot) \ u @ \ h: \ w \ $
Dies ist immer noch etwas kompliziert wegen der $ debian_chroot: + ($ debian_chroot)
Bits. Diese teilen Bash lediglich mit, dass Sie wissen sollen, ob Sie eine Debian-Chroot-Umgebung verwenden und normalerweise nicht angezeigt werden. Ignorieren Sie diese, hier ist die Standardstruktur der Bash-Eingabeaufforderungsvariablen:
\ u @ \ h: \ w \ $
\ u
zeigt Ihren Benutzernamen an, @
zeigt das @ -Zeichen an, \ h
gibt den Hostnamen (Computername) an, :
gibt das: Zeichen an, \ w
gibt das Arbeitsverzeichnis an und \ $
gibt ein $ an, wenn Sie ein normales Benutzerkonto sind, oder #, wenn Sie root sind. Also, das alles zusammen zu bekommen, bekommst du Benutzername @ Hostname: Arbeitsverzeichnis $
.
Um Ihre Bash-Eingabeaufforderung zu ändern, müssen Sie lediglich die Sonderzeichen in der PS1-Variablen hinzufügen, entfernen oder neu anordnen. Es gibt jedoch viel mehr Variablen, die Sie verwenden können als die Standardvariablen.
Lassen Sie den Texteditor für now-in nano und drücken Sie zum Verlassen Strg + X. Wir zeigen Ihnen, wie Sie mit Variablen experimentieren, bevor Sie tatsächlich eine neue in Ihre .bashrc-Datei schreiben.
So erstellen Sie eine benutzerdefinierte Bash-Eingabeaufforderung
Ihre Bash-Eingabeaufforderungskonfiguration wird in der PS1-Variablen gespeichert. Führen Sie den folgenden Befehl aus, um den Inhalt der PS1-Variablen in einer neuen Variablen zu speichern:
DEFAULT = $ PS1
Sie können jetzt die PS1-Variable auf unterschiedliche Werte einstellen, um zu experimentieren. Die erste Zeile hier würde beispielsweise Ihre Eingabeaufforderung auf eine grundlegende Eingabeaufforderung "user $" setzen, während die zweite Zeile Ihre Eingabeaufforderung auf eine grundlegende Eingabeaufforderung "user: working_directory $" setzen würde.
PS1 = "\ u \ $" PS1 = "\ u: \ w \ $"
Wenn Sie zu Ihrer Standardaufforderung zurückkehren möchten, führen Sie einfach den folgenden Befehl aus.
PS1 = $ DEFAULT
Bash wird auf die Standardaufforderung zurückgesetzt, da Sie diese Standardeinstellungen zuvor gespeichert haben. Beachten Sie, dass alle hier vorgenommenen Änderungen nur temporär für die aktuelle Bash-Sitzung sind. Sie können sich also jederzeit abmelden und wieder anmelden oder das Terminalfenster schließen und erneut öffnen, um zur Standardaufforderung zurückzukehren. Mit der obigen Zeile können Sie jedoch problemlos zu Ihrer Standard-Bash-Eingabeaufforderung zurückkehren, ohne sich mühelos abmelden oder ein Fenster schließen zu müssen.
Sie können der Variablen beliebige Zeichen oder Text hinzufügen. Um der Standardaufforderung "Hallo Welt" voranzustellen, können Sie Folgendes verwenden:
PS1 = "Hallo Welt \ u @ \ h: \ w \ $"
Jetzt, da Sie die Grundlagen beherrschen, müssen Sie nur wissen, was alle Sonderzeichen sind. Sie werden sich wahrscheinlich nicht für viele interessieren, aber hier ist die vollständige Liste, wie sie im Bash-Handbuch angezeigt wird:
- Ein Glockencharakter:
\ein
- Das Datum im Format "Wochentag Monat Datum" (z. B. "Di 26. Mai"):
\ d
- Das Format wird an strftime (3) übergeben und das Ergebnis in die Eingabeaufforderung eingefügt. Ein leeres Format führt zu einer ländereinstellungsspezifischen Zeitdarstellung. Die Zahnspangen sind erforderlich:
\ D format
- Ein Fluchtcharakter:
\ e
- Der Hostname bis zum ersten '.':
\ h
- Der Hostname:
\ H
- Die Anzahl der aktuell von der Shell verwalteten Jobs:
\ j
- Der Basisname des Endgerätenamens der Shell:
\ l
- Eine neue Zeile:
\ n
- Eine Wagenrückgabe:
\ r
- Der Name der Shell, der Basisname von $ 0 (der Teil nach dem letzten Schrägstrich):
\ s
- Die Uhrzeit im 24-Stunden-Format HH: MM: SS:
\ t
- Die Uhrzeit im 12-Stunden-Format HH: MM: SS:
\ T
- Die Uhrzeit im 12-Stunden-Format:
\ @
- Die Uhrzeit im 24-Stunden-Format HH: MM:
\EIN
- Der Benutzername des aktuellen Benutzers:
\ u
- Die Version von Bash (z. B. 2.00):
\ v
- Die Veröffentlichung von Bash, Version + Patchlevel (z. B. 2.00.0):
\ V
- Das aktuelle Arbeitsverzeichnis mit $ HOME, abgekürzt mit einer Tilde (verwendet die Variable $ PROMPT_DIRTRIM):
\ w
- Der Basisname von $ PWD, wobei $ HOME mit einer Tilde abgekürzt wird:
\ W
- Die Historiennummer dieses Befehls:
\!
- Die Befehlsnummer dieses Befehls:
\ #
- Wenn die effektive Benutzer-ID 0 ist, #, andernfalls $:
\ $
- Das Zeichen, dessen ASCII-Code der Oktalwert nnn ist:
\ nnn
- Ein Backslash:
\\
- Beginnen Sie mit einer Folge nicht druckbarer Zeichen. Dies kann verwendet werden, um eine Terminalsteuerungssequenz in die Eingabeaufforderung einzubetten:
\ [
- Beenden Sie eine Folge nicht gedruckter Zeichen:
\]
Wenn Sie also Datum und Uhrzeit Ihrer Bash-Eingabeaufforderung hinzufügen und das Arbeitsverzeichnis in eine zweite Zeile setzen möchten, können Sie die folgende Konstruktion verwenden:
PS1 = "[\ d \ t] \ u @ \ h \ n \ w \ $"
Die eckigen Klammern sind hier überhaupt nicht notwendig, helfen jedoch, die Dinge visuell aufzubrechen und die Zeile lesbarer zu machen. Wie bereits erwähnt, können Sie der Variablen, die Sie möchten, beliebigen Text oder normale Zeichen hinzufügen. Sie können also alles verwenden, was für Sie funktioniert.
Es gibt einen weiteren mächtigen Trick, über den Sie Bescheid wissen sollten: Sie können die Ausgabe eines beliebigen Befehls zur Eingabeaufforderung hinzufügen. Wenn die Aufforderung angezeigt wird, führt Bash den Befehl aus und gibt die aktuellen Informationen ein. Um dies zu tun, fügen Sie einfach jeden Befehl ein, den Sie zwischen zwei ausführen möchten '
Zeichen. Das ist kein Apostroph - das ist der schwere Akzent, der über der Tabulatortaste auf Ihrer Tastatur angezeigt wird.
Angenommen, Sie möchten die Linux-Kernel-Version in der Eingabeaufforderung anzeigen. Sie könnten eine Zeile wie die folgende verwenden:
PS1 = "\ u @ \ h auf 'uname -s -r' \ w \ $"
Nehmen wir als Beispiel an, Sie möchten die Betriebszeit und den Lastdurchschnitt des Systems anzeigen, wie es von angezeigt wird Betriebszeit
Befehl. Sie können die folgende Konstruktion verwenden, bei der die Betriebszeit in der eigenen Zeile vor dem Rest der Eingabeaufforderung steht.
PS1 = "('Betriebszeit') \ n \ u @ \ h: \ w $"
Experimentieren Sie mit verschiedenen Sonderzeichen und Befehlen, um Ihre ideale Eingabeaufforderung zusammenzustellen.
So fügen Sie Ihrer Bash-Eingabeaufforderung Farben hinzu
Wenn Sie Ihre bevorzugte Aufforderung gefunden haben, können Sie Farben hinzufügen. Das ist eigentlich sehr einfach, aber es macht die Variable furchtbar unordentlich und kompliziert, wenn Sie nicht verstehen, was Sie gerade betrachten.
Zum Beispiel war die Standardvariable für die Farbaufforderung von früher:
$ debian_chroot: + ($ debian_chroot) \ [\ 033 [01; 32m \] \ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ $
Oder entfernen Sie die debian_chroot-Bits noch einmal:
\ [\ 033 [01; 32m \] \ u \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \] \ w \ [\ 033 [00m \] \ $
Das ist eigentlich nur das \ u @ \ h: \ w $
variabel von früher, aber mit Farbinformationen. Wirklich, wir können es in einige Abschnitte aufteilen:
\ [\ 033 [01; 32m \]\ u @ \ h \ [\ 033 [00m \]: \ [\ 033 [01; 34m \]\ w \ [\ 033 [00m \]\ $
Der erste Abschnitt ist der \ u @ \ h
Bit, vorangestellt von Farbinformationen, die grün werden. Der zweite ist der :
Zeichen, vorangestellt von Farbinformationen, die jegliche Farbe entfernen. Der dritte ist der \ w
Bit, vorangestellt von Farbinformationen, die blau werden. Der vierte ist der \ $
Bit, vorangestellt von Farbinformationen, die jegliche Farbe entfernen.
Sobald Sie verstanden haben, wie Sie Farbmarkierungen selbst erstellen, können Sie den gewünschten Abschnitten Ihrer Bash-Eingabeaufforderung beliebige Farben hinzufügen.
Folgendes müssen Sie wissen: Sie müssen die gesamten Farbcodeinformationen zwischen den einfügen \ [
und \] Zeichen
s. Innerhalb des Tags müssen Sie mit beiden beginnen \ 033 [
oder \ e [
um Bash anzuzeigen, dass es sich um Farbinformationen handelt. Beide \ 033 [
und \ e [
mach das selbe. \ e [
ist kürzer, daher ist es vielleicht bequemer zu verwenden, aber wir werden es verwenden \ 033 [
hier, da es dem entspricht, was standardmäßig verwendet wird. Am Ende des Tags müssen Sie mit enden m \
um das Ende eines Farbetags anzuzeigen.
Brechen wir das ab, so wird jedes Farbetikett aussehen. Der einzige Unterschied besteht in den Informationen, die Sie anstelle von COLOR hinzufügen, um die tatsächliche Farbe zu definieren:
\ [\ 033 [FARBEm \]
Mit Bash können Sie die Farbe des Vordergrundtexts ändern, dem Text Attribute wie "Fett" oder "Unterstrichen" hinzufügen und eine Hintergrundfarbe festlegen.
Hier sind die Werte für den Vordergrundtext:
- Schwarz: 30
- Blau: 34
- Cyan: 36
- Grün: 32
- Lila: 35
- Rot: 31
- Weiß: 37
- Gelb: 33
Da violetter Text beispielsweise der Farbcode 32 ist, würden Sie verwenden \ [\ 033 [32m \]
für violetten Text.
Sie können auch ein Attribut für den Text angeben. Dieses Attribut muss vor der Farbnummer eingefügt werden, getrennt durch ein Semikolon (;). Text mit diesen Attributen wird in verschiedenen Terminalemulatoren anders aussehen.
Hier sind die Werte für Textattribute:
- Normaler Text: 0
- Fett oder heller Text: 1 (hängt vom Terminalemulator ab.)
- Dim Text: 2
- Unterstrichener Text: 4
- Blinkender Text: 5 (Dies funktioniert nicht in den meisten Terminalemulatoren.)
- Umgekehrter Text: 7 (Dadurch werden die Vorder- und Hintergrundfarben invertiert, sodass schwarzer Text auf weißem Hintergrund angezeigt wird, wenn der aktuelle Text weißer Text auf schwarzem Hintergrund ist.)
- Versteckter Text: 8
Sie müssen eigentlich nicht das normale Textattribut einfügen. Das ist sowieso der Standard.
Da roter Text beispielsweise Code 31 und fetter Text Code 1 ist, würden Sie verwenden \ [\ 033 [1; 31m \]
für fetten roten Text.
Sie können auch eine Hintergrundfarbe angeben, aber Sie können einer Hintergrundfarbe kein Attribut hinzufügen.
Hier sind die Werte für Hintergrundfarben:
- Schwarzer Hintergrund: 40
- Blauer Hintergrund: 44
- Cyan-Hintergrund: 46
- Grüner Hintergrund: 42
- Lila Hintergrund: 45
- Roter Hintergrund: 41
- Weißer Hintergrund: 47
- Gelber Hintergrund: 43
Zum Beispiel, da ein blauer Hintergrund Code 44 ist, \ [\ 033 [44m \]
würde einen blauen Hintergrund angeben.
Sie können sowohl Vordergrund- als auch Hintergrundfarbe-Tags angeben. Beispielsweise steht 42 für einen grünen Hintergrund und 31 für roten Text. Damit die Standardaufforderung zu rotem Text auf grünem Hintergrund wird, verwenden Sie Folgendes:
PS1 = "\ [\ 033 [42m \] \ [\ 033 [31m \] \ u @ \ h: \ w \ $ "
Wir geben hier lediglich eine Hintergrundfarbe und dann eine einzelne Vordergrundtextfarbe an, die am Anfang der Aufforderung beginnt und auf den gesamten Text in der Aufforderung angewendet wird. Sie können jedoch in der Variablen so viele Farbmarkierungen angeben, wie Sie möchten, um verschiedene Abschnitte Ihrer Eingabeaufforderung zu färben, wie Sie möchten.
Die Hintergrund- und Vordergrundtextfarben gehen immer über die Eingabeaufforderung hinaus, es sei denn, Sie geben den Farbcode 00 an, um die Farbinformationen zu löschen. Sie können dieses Tag auch innerhalb der Variablen verwenden, um die Formatierung irgendwo in Ihrer Eingabeaufforderung auf den Standard zurückzusetzen. Zum Beispiel würde die folgende Zeile alle Farben vor dem Zeichen beenden \ $
Charakter.
PS1 = "\ [\ 033 [42m \] \ [\ 033 [31m \] \ u @ \ h: \ w \\ [\ 033 [00m \] \ $ "
So legen Sie Ihre neue Standardaufforderung fest
Sobald Sie mit Farben experimentiert haben, sollten Sie eine Bash-Aufforderung haben, die Sie in der aktuellen Sitzung mögen. Wahrscheinlich möchten Sie die neue Eingabeaufforderung dauerhaft machen, sodass sie automatisch in allen Ihren Bash-Sitzungen verwendet wird.
Dazu müssen Sie lediglich den Inhalt der PS1-Variablen in der .bashrc-Datei ändern, die wir zuvor betrachtet haben.
Öffnen Sie die .bashrc-Datei in Ihrem bevorzugten Texteditor wie folgt:
nano ~ / .bashrc
Scrollen Sie nach unten und suchen Sie den Abschnitt PS1 =. Ersetzen Sie einfach die Standardvariable durch Ihre angepasste Variable. Sie wollen wahrscheinlich die verlassen $ debian_chroot: + ($ debian_chroot)
Bits alleine jedoch - sie werden sowieso nicht angezeigt, wenn Sie sich nicht in einer Chroot-Umgebung befinden.
Geben Sie Ihre farbige PS1-Variable unter ein if ["$ color_prompt" = ja]; dann
Linie. Geben Sie die Variable ohne Farben unter ein sonst
Linie.
Speichern Sie die Datei und schließen Sie Ihren Texteditor. Um beispielsweise die Datei in Nano zu speichern, drücken Sie Strg + O, drücken Sie die Eingabetaste, und drücken Sie dann Strg + X, um den Vorgang zu beenden.
Wenn Sie das nächste Mal eine neue Bash-Shell starten, z. B. durch Anmeldung am Terminal oder durch Öffnen eines neuen Terminalfensters, wird Ihre benutzerdefinierte Eingabeaufforderung angezeigt.