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.
- Die (auskommentierte) Zeile PS1version verwende ich in chroot-Umgebungen, damit ich noch zuordnen kann, wo ich gerade stehe. Aktiviere ich die Zeile, wird im Prompt zusätzlich der Text 8.1 ausgegeben, und zwar mit türkisfarbenem Hintergrund.
- In PS1error lasse ich den Exitcode mitsamt Formatierung ausgeben - es sei denn, der Exitcode war 0 (= Erfolg). Die Variable $ret ist notwendig, weil test den Inhalt von $? verändert.
- PS1user sorgt für die Ausgabe des Usernamens -
Normalerweise unformatiert, nur root wird hellrot hinterlegt.
Die Verwendung von whoami hat gegenüber der Bash-internen
Variable $USER den Vorteil, dass es auch bei su und
nicht nur bei su - funktioniert.
Übrigens: diese Variable wird direkt in beim Durchlaufen der bash.bashrc.local expandiert, whoami wird also nur einmal aufgerufen. - In PS1color setze ich die Farbe für die Hervorhebung des Pfads. Die Auslagerung hat den Vorteil, dass ich den Wert einfacher anpassen kann. Auf verschiedenen Rechnern arbeite ich mit anderen Farben, was die Übersicht über die xterms fördert ;-)
- In der Zeile PS1=... wird der eigentliche Prompt generiert. Dazu werden die vorher erstellten Variablen PS1.... zusammengesetzt und um einige weitere Angaben ergänzt. Wichtig dabei ist, dass $PS1error erst bei der Anzeige des Prompts expandiert wird.
- Mit tty | grep pts ... wird noch das aktuelle Verzeichnis sowie der User- und Rechnername in die Titelleiste eines xterms gepackt, falls man sich gerade in einem solchen befindet.
- Schließlich wird die Variable $PS1 mit export PS1 zur weiteren Verwendung freigegeben.
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