Der bash Prompt Tutorial Teil 2

Den bash Prompt hast du schon in verschiedenen Posts hier gesehen. Es ist die Eingabeaufforderung der Shell.Er erscheint bei einer Login-Shell immer dann, wenn die bash bereit ist, ein Kommando von dir entgegen zu nehmen und zu verarbeiten.

bash Logo CC-BY-NC Dr. Dirk Colbry, Michigan State University
bash Logo CC-BY-NC Dr. Dirk Colbry, Michigan State University
1Einführung
2Der bash Prompt
3key bindings
4Der Startvorgang
5Environment Variablen
6builtin commands
7Schleifen

Der vorkonfigurierte bash Prompt

Bei einem frisch installierten Raspberry Pi OS 5 sieht der Prompt nach dem ssh Login so aus:

Der bash Prompt nach dem Login mit ssh
Der bash Prompt nach dem Login mit ssh

Gehen wir das mal von links nach rechts durch.

pi@uter ist der Username, mit dem du dich eingeloggt hast und der Hostname deines Raspberry Pis. Nach dem Doppelpunkt steht eine Tilde „~“. Sie bezeichnet das aktuelle Verzeichnis, in dem du mit dieser Shell stehst, nämlich dein User Verzeichnis unter /home/pi, eigentlich alle Shells verkürzen das zu ~, es spart Tipparbeit.

Dem Arbeitsverzeichnis folgt ein Leerzeichen und danach ein $ Zeichen. Durch ein weiteres Leerzeichen wird dann der Cursor abgetrennt, ab dieser Stelle werden deine Tastatureingaben ausgegeben.

Der Prompt lässt sich auf vielfache Weise konfigurieren.

bash Prompt konfigurieren

Diese Voreinstellung musst du nicht benutzen, wenn sie dir nicht gefällt. Wie das Prompt aussieht ist in der sog. Umgebungsvariable PS1 festgelegt und kann von dir angepasst werden.

Gib einfach mal

PS1='> '

ein und dein bash Prompt ändert sich in ein einzelnes > gefolgt von einem Leerzeichen. Diese Änderung ist nur aktiv, bis du dich ausloggst, beim nächsten Login wird der Standard bash Prompt wiederhergestellt.

Der Prompt ist nur noch ein einzelnes „> „

Sonderzeichen

Es gibt einige Sequenzen, die definierte Werte den Prompt einfügen.

SequenzBezeichnung
\aASCII Bell (Zeichen 0x07)
\AUhrzeit im 24h Format)
\eASCII ESC (Zeichen 0x1B)
\hHostname ohne Domainteil
\Hvollständiger Hostname
\jAnzahl der Jobs, die in dieser Shell laufen.
\lDas tty, auf dem die Shell läuft.
\nLinefeed, ASCII LF (Zeichen 0x0A)
\twie \A
\TUhrzeit im 12h Format.
\RCarriage Return, ASCII CR (Zeichen 0x0D)
\sName der verwendeten Shell
\uUsername des aktuellen Benutzers.
\vbash Version
\wArbeitsverzeichnis
\Wletzter Teil des Arbeitsverzeichnisses
\!aktuelle Historynummer
\#aktuelle Befehlsnummer
\$Bei root ein „#“, sonst „$“
\\Backslash
\nnnASCIIzeichen mit dem oktalen Code nnnn
\[Beginn einer Sequnenz nicht darstellbarer Zeichen
\]Ende dieser Sequenz
\@Uhrzeit im 12h (AM/PM) Format

Bei einigen dieser Werte fällt mir kein Grund ein, warum ich die im Prompt angezeigt werden sollten.

PS1="\u@\H :\w \$"
Beinah der Standardprompt, nur farblos
Beinah der Standardprompt, nur farblos

Damit definierst du den bash Prompt größtenteils wieder auf die Standardeinstellung zurück. Allerdings fehlt dabei die Farbdarstellung. Falls du lieber die aktuelle Uhrzeit im Prompt sehen möchtest, kannst du folgendes machen:

$PS1="\t> "
Prompt mit Uhrzeit
Prompt mit Uhrzeit

Farbspielereien

In der Standarddefinition ist das Prompt mit Farben versehen. Das erhöht die Lesbarkeit. Wie das geht, zeige ich dir jetzt.

In textbasierten Terminals werden Farben und Textauszeichnungen schon seit 1979 über die ANSI Escapesequenzen definiert, die sind zwar auf den ersten Blick nicht ganz einfach zu lesen, erfüllen aber ihren Zweck.

Die Escape-Sequenzen werden immer mit einem ESC Zeichen, gefolgt von einem „[“ eingeleitet.Danach folgen die Codes, um die nachfolgenden Zeichen zu modifizieren. Ein Beispiel zeigt das vermutlich am Besten: ESC[1;33m ist die Sequenz, um die nachfolgenden Zeichen i normaler Schrift in gelber Vordergrundfarbe darzustellen. Jede Farbe hat einen eigenen Code.

Schriftfarben
\033[0;30mschwarz
\033[1;30mdunkelgrau
\033[0;31mrot
\033[1;31mhellrot
\033[0;32mgrün
\033[1;32mhellgrün
\033[0;33mbraun
\033[1;33mgelb
\033[0;34mblau
\033[1;34mhellblau
\033[0;35mdunkellila
\033[1;35mhelllila
\033[0;36mdunkeltürkis
\033[1;36mtürkis
\033[0;37mhellgrau
\033[1;37mweiß
\033[0mfarblos
Hintergrundfarben
\033[40mschwarz
\033[41mrot
\033[42mgrün
\033[43mhellbraun
\033[44mblau
\033[45mlila
\033[46mtürkis
\033[47mhellgrau

Du kannst Schrift- und Hintergrundfarbe in einer Sequenz zusammenfassen.

 echo -e "\033[0;31;46mText"

Damit wird das Wort „Text“ in rot auf blauem Hintergrund ausgegeben.

Mit diesen Sequenzen können wir uns jetzt wieder unseren ursprünglichen Prompt zusammenbauen. In der Tabelle oben siehst du, dass das ESC-Zeichen als \e eingefügt werden kann, du musst also nicht unbedingt auf den oktaler Wert zurückgreifen.

PS1="\e[1;32m\u@\H :\e[0;34m\w \$\e[0m"

User und Hostname werden in hellgrün \e[1;32m dargestellt, das aktuelle Verzeichnis in blau \e[34m. Zum Abschluss wird mit \e[0m die Farbe zurückgesetzt.

Das Prompt mit verschiedenen Farben über die ANSI-Sequenzen
Das Prompt mit verschiedenen Farben über die ANSI-Sequenzen

Der bash Prompt in der Praxis

Der Prompt dient in erster Linie dazu, dir zu signalisieren, dass die bash bereit ist, eine neue Eingabe von dir entgegen zu nehmen. Alles, was du am Prompt eingibst, versucht die bash auszuführen, entweder als eingebautes Kommando oder als externes Kommando, das vom Datenträger nachgeladen werden muss.

Gib beim Prompt einfach mal ein

> ls

Dieses eingebaute Kommando listet dir alle Dateien und Unterverzeichnisse im aktuellen Verzeichnis auf. Das Aussehen deines Prompts hat keinerlei Einfluss auf das Kommando. Der Prompt dient nur deiner Information.

Im nächsten Teil zeig ich dir, wie key bindings dir die Arbeit am Prompt leichter machen.

Schreibe einen Kommentar

WordPress Cookie Hinweis von Real Cookie Banner