cboltz.de

Informative Eingabeaufforderung

Der normale Bash-Prompt enthält bei SuSE Linux Benutzernamen, Rechnername und das aktuelle Verzeichnis. Viel mehr brauche ich nicht, allerdings möchte ich es übersichtlicher (farbig) und möchte außerdem informiert werden, wenn ein Programm mit einem Exitcode > 0 beendet wird. Zudem ist es ganz praktisch, wenn in einem xterm immer der Pfad sowie user@host in der Titelzeile angezeigt werden. Mein Prompt sieht so aus:

cb@tux:/tmp> false [1] cb@tux:/tmp> su Password: root@tux:/tmp>

Man sieht gleich, dass der Befehl false wie gewünscht mit Exitcode 1 beendet wurde. Auch root-Sessions sind leicht erkennbar.

Wie funktioniert das?

Ich habe mir den Prompt ($PS1) entsprechend angepasst; das wichtigste ist die Anzeige von Exitcodes > 0. In meiner /etc/bash.bashrc.local steht folgendes:

# PS1version=' \[\e[46m\]8.1\[\e[0m\]' PS1error='$( ret=$? ; test $ret -gt 0 && echo "\[\e[41;93m\] [$ret] \[\e[0m\]" )' PS1user="$( test `whoami` == root && echo '\[\e[101m\]' )\u\[\e[0m\]" PS1color='\[\e[1;37;44m\]' # Farbe Arbeitsverzeichnis PS1="$PS1error$PS1user@\h:$PS1color\w\[\e[0m\]$PS1version> " tty | grep pts > /dev/null && PS1="$PS1\[\e]0;\w - \u@\h\a\]"; export PS1

Was machen diese ganzen Befehle und Variablen? Ich erkläre es der Reihe nach.

Lesetipps zum Thema: man console_codes für die Farbgebung und man bash zum Thema Prompt im Allgemeinen. Außerdem ist das Bash-Prompt HowTo eine Lektüre wert ;-)

Verfügbare Farben

for i in `seq 1 7 ; seq 30 48 ; seq 90 107` ; do echo -e "$i \e[${i}mtest\e[0m" done

gibt eine Liste der möglichen Farben aus.

Die Farben 90-107 sind nicht in man console_codes dokumentiert. Vor Ihrer Verwendung im Prompt sollte man daher zuerst mit obiger Schleife testen, ob sie unterstützt werden.

Letzte Aktualisierung: 20.2.2005