Das farbige Bash Prompt

19. November 2012 at 20:15

Beispiel meines PromptsEin ehemaliger Arbeitskollege hat mich auf die Idee gebracht, mein geliebtes Prompt mal zu veröffentlichen.

Vor langer Zeit störte mich auf der Shell oft, dass man beim Arbeiten mit langen Ausgaben oft den Anfang der Ausgabe suchen mußte. Das war teilweise gar nicht so nicht einfach, wenn man mehrere ähnlich aussehende Config-Files nacheinander anzeigt, muss man schon genau schauen, wo dazwischen das Prompt steht.

Die Lösung war einfach: Ein farbiges Prompt. So erkennt man sehr schnell die Trennung und wenn das Prompt dann noch eine Leerzeile einbaut, wird es richtig schnell übersichtlich.

Folgende Informationen wollte ich noch im Prompt sehen:

  • Benutzername
  • Hostname
  • Aktuelles Arbeitsverzeichnis
  • Exitcode des letzten Kommandos

Der Exitcode (in Spitzen Klammern, hier im Beispiel ‚0‘) ist für’s Scripten sehr hilfreich, da man direkt beim Ausprobieren eines Kommandos an der Shell sieht, welcher Exitcode vom Programm zurückgegeben wird. So weiß ich gleich, ob es klappt und welchen Exitcode mein Script beim Ausführen des Kommandos erwarten darf.

Zusätzlich zum Prompt setze ich auf meinem System auch gleich noch einen Alias für ‚ls‘, damit dort immer die lange Ausgabe ausgegeben wird und die Einträge auch gleich in passenden Farben erscheinen.

In Summe sieht das dann bei mir so aus:

export PS1='\n\[\033[1;32m\]\u@\h: \w\n<$?> $ \[\033[0m\]'
alias ls='ls -AlFh --color=auto'
export LS_OPTIONS='--color=auto'
export LS_COLORS='no=00;37:fi=00;37:di=01;37:ln=01;33:pi=00;36:so=00;36:do=00;36:bd=00;36:cd=00;36:or=00;33:ex=01;36:';

Um das Prompt (Umgebungsvariable PS1) kurz zu erklären:

  • \n ist ein Enter
  • \[\033[{code}m\] = Ansi Escape Farbcode (siehe dazu Linupedia und Wikipedia)
  • \u ist der aktuell angemeldete Benutzer
  • \h ist der Hostname
  • \w ist das aktuelle Verzeichnis (working directory)
  • $? ist der Exitcode des letzten Programms
  • $ ist das Prompt-Zeichen (abhängig davon, ob man Benuter oder Root ist)

Die ‚1;32m‘ in der ersten Zeile ist der Farbcode:

  • 0;30m – Schwarz
  • 1;30m – Dunkelgrau
  • 0;31m – Rot
  • 1;31m – Hellrot
  • 0;32m – Grün
  • 1;32m – Hellgrün
  • 0;33m – Braun
  • 1;33m – Gelb
  • 0;34m – Blau
  • 1;34m – Hellblau
  • 0;35m – Violett
  • 1;35m – Hellviolett
  • 0;36m – Türkis
  • 1;36m – Helltürkis
  • 0;37m – Hellgrau
  • 1;37m – Weiß

Das ganze läßt sich dann z.B. in der ~/.bashrc eintragen, so dass es bei jedem Login gleich verfügbar ist.

Ich mache dies meist aber nicht so. Es gab in meinem Job schon Diskussionen mit anderen Admins, die mein Prompt nicht sinnvoll fanden oder ihr eigenes lieber hatten. So haben wir uns darauf geeinigt, keine Farben in der .bashrc zu speichern und stattdessen im Home-Verzeichnis eine Datei mit dem eigenen Prompt anzulegen.

Bei mir heißt die Datei ~/prompt_mbutschek und enthält obige Zeilen. Nach dem Login gebe ich ein ‚. pr[tab]‘, was dann zu ‚. prompt_mbutschek‘ wird. Damit importiere ich die Einstellungen in die aktuelle Bash-Sitzung. Andere Admins haben dagegen das Standardprompt und werden durch meine Liebe zum bunten Prompt nicht gestört.