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.
Inhalt
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“.
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.
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.
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\$
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:
Platzhalter | Beschreibung |
---|---|
Datum & Uhrzeit | |
\d |
Datum 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. |
\t |
Aktuelle Uhrzeit im 24h-Format HH:MM:SS |
\T |
Aktuelle Uhrzeit im 12h-Format HH:MM:SS |
\@ |
Aktuelle Uhrzeit im 12h-Format HH:MM am/pm |
\A |
Aktuelle Uhrzeit im 24h-Format HH:MM |
Hostname | |
\h |
Hostname bis zum ersten . |
\H |
Hostname (vollständig) |
Benutzer | |
\u |
Name des angemeldeten Benutzers |
\$ |
Marker für den aktuellen Rechtestatus. Als root # , sonst $ |
\w |
Vollständiger Pfad zum aktuellen Arbeitsverzeichnis. Das Benutzer-Homeverzeichnis wird mit ~ abgekürzt. |
\W |
Aktuelles Arbeitsverzeichnis. Das Benutzer-Homeverzeichnis wird mit ~ abgekürzt. |
Prozesse & Befehle | |
\j |
Anzahl 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 | |
\l |
Name des Terminals (z.B. ttys000 ) |
\s |
Name der Shell (z.B. bash ) |
\v |
Version der Shell (z.B. 3.2 ) |
\V |
Version der Shell mit Unterversionen/Patchlevel (z.B. 3.2.57 ) |
Sonderzeichen | |
\\ |
Backslash ( \ ) |
\n |
Leerzeile |
\r |
Zeilenumbruch |
\e |
ASCII-Escape-Zeichen |
\nnn |
Beliebiges 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:
<hhh>\[\033[48;5;
<s>;38;
<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:
1 |
fett |
2 |
transparent |
3 |
kursiv |
4 |
unterstrichen |
5 |
normal |
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.
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:
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
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
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:
- https://unix.stackexchange.com/questions/124407/what-color-codes-can-i-use-in-my-ps1-prompt
- https://www.cyberciti.biz/faq/apple-mac-osx-terminal-color-ls-output-option/
- https://github.com/robbyrussell/oh-my-zsh/wiki/themes
- https://github.com/Lokaltog/vim-powerline
- https://github.com/bhilburn/powerlevel9k/wiki/Show-Off-Your-Config
- https://github.com/powerline/powerline
- https://github.com/slok/rainbow-bash
- https://stackoverflow.com/questions/26229576/modify-bash-prompt-prefix-in-os-x-terminal
- http://osxdaily.com/2006/12/11/how-to-customize-your-terminal-prompt/
- http://www.linux-community.de/Internal/Artikel/Print-Artikel/LinuxUser/2007/09/Bash-Prompt-konfigurieren/(article_body_offset)/2
- http://linuxcommand.org/lc3_adv_tput.php
- Proxmox: „Failed to connect to Server“ mit Safari auf MacOS - 28. Januar 2023
- Loxone: Benachrichtigung per Telegram - 15. Januar 2022
- Telegram: Nachrichten per Bot von der Heimautomation aufs Handy - 2. Januar 2022