macOS: pimp your terminal prompt

Inspiriert durch Björns Beitrag „Howto: iTerm2 · Pimp your macOS Terminal“ habe ich mal geschaut, was man so mit dem Prompt im macOS-Terminal anstellen kann. Mir gefällt, was er damit gemacht hat. Was mir jedoch nicht gefällt ist eine andere Terminal-App zu verwenden. Ich bin sehr zufrieden mit dem Terminal von macOS und sehe keine Notwendigkeit, wegen ein paar optischer Gimmicks zu wechseln. Ohnehin versuche ich stets weitestgehend mit dem auszukommen, was das System mitbringt – und das klappt auch in diesem Fall.

macOS Terminal mit angepasstem Prompt

macOS Terminal mit angepasstem Prompt

Schriftart & Farbe

Ich habe mir überlegt, ohne dass ich mich großartig mit dem Thema beschäftigt habe, dass man ja eigentlich nur ein paar Farben anpassen muss und ein Zeichen benötigt, das dieses Dreieck abbildet, um so einen Prompt zu erhalten. Das Anpassen von Farben hatte ich auch schonmal hier behandelt, und darauf kann man aufbauen. Das Thema mit dem Dreieck ist jedoch nicht ganz so leicht. Mit der App „Schriftsammlung“ von macOS kann man sich den kompletten Zeichensatz einer Schriftart anzeigen lassen. Das Terminal verwendet standardmäßig die Schriftart „Monaco“.

macOS Terminal mit Standard-Einstellungen

macOS Terminal mit Standard-Einstellungen

In dieser Schriftart fehlt jedoch ein Zeichen in Form eines Dreiecks, dass die gesamte Zeile Zeilenhöhe im Terminal einnimmt. Das konnte ich auch in sonst keiner installierten Schriftart mit fester Breite finden. Nach ein paar Google-Suchen bin ich dann über die Stichwörter „VIM Powerline“ und „ZSH“ auf dieses Git-Repository gestoßen. Da gibt es verschiedene Schriftarten zum Download, die ein paar mehr Zeichen beinhalten. Unter anderem auch das benötigte Dreieck. Ich habe mich für die Schriftart Meslo Dotted entschieden, diese heruntergeladen und installiert.

macOS Schriftsammlung: Meslo for Powerline

macOS Schriftsammlung: Meslo for Powerline

Hier sind die benötigten Zeichen enthalten, um ein gefülltes Dreieck oder eine dreieckige Linie einfügen zu können. Somit müssen wir diese Schriftart nur in den Einstellungen des Terminals auswählen. Zusätzlich stelle ich den Hintergrund auf volle Deckkraft und die Schriftgröße auf 14.

macOS Terminal: EinstellungenmacOS Terminal: Hintergrundfarben

Am Terminal selber sieht man bis jetzt kaum einen Unterschied. Die Schriftart hat sich geändert, die Schriftgröße wird erst übernommen, wenn man das Terminal schließt und erneut öffnet. Da wir den Prompt noch garnicht angefasst haben, sieht der natürlich auch aus wie immer.

Variablen und Platzhalter für den Prompt

Die aktuelle Konfiguration des Promptes kann man sich durch den Befehl $ echo $PS1 ausgeben lassen. Die Ausgabe müsste so aussehen, wenn man bisher noch nichts angepasst hat:

\h:\W \u\$

Es gibt mehrere Prompte in einem Unix-basierenden System. PS1 ist dabei der Prompt, der zur Eingabe eines Befehls auffordert. PS2 erscheint, wenn ein Befehl unvollständig ist und weitere Eingaben benötigt werden. Er besteht aus lediglich einem Zeichen ( > ) und kann auf die gleiche Art und Weise angepasst werden.

Folgende Platzhalter kann man am Prompt verwenden. Sie werden dann automatisch durch die entsprechenden Werte ersetzt werden:

PlatzhalterBeschreibung
Datum & Uhrzeit
\dDatum im Format “Wochentag Monat Tag” (z.B. So Mär 04)
\D{format}Datum in einem Benutzerdefinierten Format von strftime(3). Klammern müssen mit angegeben werden, Platzhalter sind hier zu finden.
\tAktuelle Uhrzeit im 24h-Format HH:MM:SS
\TAktuelle Uhrzeit im 12h-Format HH:MM:SS
\@Aktuelle Uhrzeit im 12h-Format HH:MM am/pm
\AAktuelle Uhrzeit im 24h-Format HH:MM
 Hostname
\hHostname bis zum ersten .
\HHostname (vollständig)
Benutzer
\uName des angemeldeten Benutzers
\$Marker für den aktuellen Rechtestatus. Als root #, sonst $
\wVollständiger Pfad zum aktuellen Arbeitsverzeichnis. Das Benutzer-Homeverzeichnis wird mit ~ abgekürzt.
\WAktuelles Arbeitsverzeichnis. Das Benutzer-Homeverzeichnis wird mit ~ abgekürzt.
Prozesse & Befehle
\jAnzahl der Prozesse, die derzeit in der Shell ausgeführt werden
\!Laufende Nummer für eingegebene Befehle in der History
\#Laufende Nummer für eingegebene Befehle in der Sitzung
Terminal & Shell
\lName des Terminals (z.B. ttys000)
\sName der Shell (z.B. bash)
\vVersion der Shell (z.B. 3.2)
\VVersion der Shell mit Unterversionen/Patchlevel (z.B. 3.2.57)
Sonderzeichen
\\Backslash ( \ )
\nLeerzeile
\rZeilenumbruch
\eASCII-Escape-Zeichen
\nnnBeliebiges Zeichen als oktale Zahl
Steuerzeichen
\[Beginn einer Sequenz von Steuerzeichen
\]Ende einer Sequenz von Steuerzeichen

Zusätzlich zu den Platzhaltern können auch beliebige Terminalbefehle ausgeführt und deren Rückgabewerte angezeigt werden. Befehle werden mit $(...) maskiert, z.B. $(date) für das aktuelle Datum/Uhrzeit oder $(ifconfig en0 | awk '$1 == "inet" {print $2}') für die aktuelle IP-Adresse des Netzwerkanschlusses. Und natürlich kann auch jedes weitere Zeichen einer Schriftart eingefügt werden.

Text- und Hintergrundfarben

Das Terminal ist vom Typ xterm-256color (Standardeinstellung) und kann somit 256 Farben anzeigen. Diese werden wie folgt angegeben:

\[\033[48;5;<hhh>;38;<s>;<vvv>m\] ...Text, Platzhalter, usw. ... \[\033[0m\]

Wobei <hhh> für die Hintergrundfarbe steht, <vvv> für die Vordergrundfarbe und <s> für den Stil. Stile können sein:

1fett
2transparent
3kursiv
4unterstrichen
5normal

Es scheint noch ein paar mehr Möglichkeiten zu geben. Außerdem können die Stile auch für den Hintergrund angewendet werden. Allerdings entstehen dabei teilweise merkwürdige Konstellationen. Bei Bedarf vielleicht einfach mal ausprobieren.

Aus folgender Farbtabelle (Quelle) können die Werte für die Farben entnommen werden (die Zahl unten links im jeweiligen Kasten):

Prompt zusammenbauen

Jetzt müssen wir die ganzen Sachen nur noch geschickt miteinander kombinieren. Dazu kann man beliebig mit dem Befehl $ export PS1="..." herumspielen.

Es ist vollkommen ungefährlich, damit herumzuprobieren, da die Einstellungen nicht gespeichert werden und nur für die aktuelle Sitzung im Terminal gelten. Sollte man sich beim Probieren festfahren oder die Übersicht verlieren, dann einfach das Terminalfenster schließen und neu öffnen.

Ich verwende derzeit folgende Kombination für meinen Prompt:

export PS1="\[\033[48;5;33;38;5;15m\]  \[\033[48;5;8;38;5;33m\]\[\033[48;5;8;38;5;15m\] \w \[\033[48;5;0;38;5;8m\]\[\033[0m\] \$ "
            ------ ------- -------   ---       ------ -------   -       ------ -------    ---        ------ ------  -   -------- ---
               |      |       |       |           |      |      |          |      |        |            |      |    |       |     |
               |      |       |       |           |      |      |          |      |        |            |      |    |       |     +--> Rechtestatus
               |      |       |       |           |      |      |          |      |        |            |      |    |       +--------> Textformatierung beenden
               |      |       |       |           |      |      |          |      |        |            |      |    +----------------> Dreieck
               |      |       |       |           |      |      |          |      |        |            |      +---------------------> Vordergrundfarbe grau
               |      |       |       |           |      |      |          |      |        |            +----------------------------> Hintergrundfarbe schwarz
               |      |       |       |           |      |      |          |      |        +-----------------------------------------> Aktuelles Arbeitsverzeichnis
               |      |       |       |           |      |      |          |      +--------------------------------------------------> Vordergrundfarbe weiß
               |      |       |       |           |      |      |          +---------------------------------------------------------> Hintergrundfarbe grau
               |      |       |       |           |      |      +--------------------------------------------------------------------> Dreieck
               |      |       |       |           |      +---------------------------------------------------------------------------> Vordergrundfarbe hellblau
               |      |       |       |           +----------------------------------------------------------------------------------> Hintergrundfarbe grau
               |      |       |       +----------------------------------------------------------------------------------------------> Apfel-Zeichen
               |      |       +------------------------------------------------------------------------------------------------------> Vordergrundfarbe weiß
               |      +--------------------------------------------------------------------------------------------------------------> Hintergrundfarbe hellblau
               +---------------------------------------------------------------------------------------------------------------------> Textformatierung beginnen

Da sehr wahrscheinlich deine im Browser eingestellte Schriftart das Dreieck als Zeichen nicht beinhaltet, wird dafür nur ein kleines Kästchen angezeigt. Im Terminal mit der entsprechend eingestellten Schrift sieht das ganze dann so aus:

macOS Terminal: export PS1

macOS Terminal: export PS1

Nun kann man nach Belieben herumprobieren, bis man das gewünschte Ergebnis erhält. Möchte man Zeichen verwenden, die man nicht auf der Tastatur findet, dann kann man die am einfachsten aus der Schriftsammlung herauskopieren.

Noch ein Tipp: Es gibt auch Steuerzeichen, mit denen der Cursor bewegt werden kann. Damit könnte man zum Beispiel eine Statuszeile einbauen, indem man nach ganz oben springt, dort irgendwelche Informationen einbaut, und anschließend wieder nach unten springt. Das wird aber recht schnell kompliziert. Weitere Informationen dazu hier und hier.

Farbige Ausgaben einschalten

Um das Ganze jetzt abzurunden schalten wir noch die farbige Ausgabe bestimmter Befehle (z.B. $ ls -al) ein:

$ export CLICOLOR=1

macOS Terminal: clicolor

macOS Terminal: clicolor

Einstellungen Speichern

Fehlt eigentlich nur noch eins: die Einstellungen so speichern, dass sie auch beim nächsten Öffnen des Terminals noch vorhanden sind. Dazu öffnen wir die Datei .bash_profile (wird automatisch erstellt, sollte sie noch nicht vorhanden sein) und ergänzen sie um das Prompt und die farbige Anzeige:

$ nano ~/.bash_profile

macOS Terminal: .bash_profile

macOS Terminal: .bash_profile

Den Editor mit ctrl+x schließen, Veränderungen abspeichern. Beim nächsten Öffnen des Terminals sieht dann alles wie gewünscht aus.

Inspiration

Man kann ja so einiges machen, daher lasse ich Euch mal ein paar Links zu verschiedenen Themen da:

Farben
Themes / Optische Inspiration
Platzhalter
Cursor-Steuerung
Sebastian

Sebastian

...ist staatlich geprüfter Techniker für Elektrotechnik, Schwerpunkt Prozessautomatisierung und Energietechnik. Die Themen Automatisierung und Programmierung haben es ihm besonders angetan.
Außerdem ist er für jede technische Spielerei zu haben 😉
Sebastian

Letzte Artikel von Sebastian (Alle anzeigen)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Translate »