Last Updated:

Bash pimpen 2.0

Ralf Matthes

Howto: Bash "pimpen"

Wenn man eine Konsole öffnet bekommt man meistens ein schwarzes Fenster präsentiert, in dem mit weisser Schrift steht: sh-3.1$ _
Nunja, ich fand das etwas langweilig, und hab mal geguckt wie man das ändern kann, wie das geht schreib ich hier. Viel Spaß beim verschönern eurer Bash.

Inhaltsverzeichnis

  1. Bashprompt verändern
  2. MOTD, Fortunes, Logos o.Ä. beim Start
  3. Hintergrund ändern
  4. Standardfarben ändern
  5. Links/Quellen

1. Bashprompt verändern
Der Bash-Prompt ist die Eingabeaufforderung der Bash. Diese erscheint immer bevor du einen Befehl eingeben kannst. Ein einfaches > oder $ bzw. # als Eingabeaufforderung ist etwas langweilig, man kann dort auch Usernamen, Hostnamen, Zeit etc. einfügen, außerdem kann man das ganze auch noch einfärben. Den Bashprompt kann man mit folgendem Befehl ändern:

export PS1=<prompt>

Um deinen neuen Bashprompt zu speichern, musst du ihn einfach ans Ende der Datei ~/.bashrc eintragen. Das sieht dann z.B. so aus:

~/.bashrc

# /etc/skel/.bashrc:
# $Header: /var/cvsroot/gentoo-x86/app-shells/bash/files/dot-bashrc,v 1.3 2005/07/06 22:10:22 vapier Exp $
#
# This file is sourced by all *interactive* bash shells on startup,
# including some apparently interactive shells such as scp and rcp
# that can't tolerate any output.

[gekürzt]

# uncomment the following to activate bash-completion:
#[ -f /etc/profile.d/bash-completion ] && source /etc/profile.d/bash-completion

export PS1="\[\033[1;36m\]\t \[\033[1;32m\]\h \[\033[1;34m\]\w \$ \[\033[0m\]"

Ist dort schon ein Eintrag für den Bashprompt, kann man diesen einfach editieren, oder auskommentieren(einfach ein # vor die entsprechende Zeile setzen). Um nun den Prompt einzufärben und mit einigen Informationen zu versehen, benutzt man Escape und Colorcodes. Diese habe ich in den beiden folgenden Tabellen
aufgeschrieben.

Am besten, man fängt mit der Dekoration und den Escape-Codes an, z.B. so:

Code:
export PS1='[\t] [\u@\h] \$ '
Das sieht dann so aus: [21:20:03] [antu@itchy] $

Dann färbt man das ganze ein:

Code:
export PS1='[\[\033[34m\]\t\[\033[0m\]] [\[\033[35m\]\u@\h\[\033[0m\]] \$ '
Das sieht dann so aus: [21:20:03] [antu@itchy] $

Wenn dir der Bashprompt gefällt, trage ihn einfach in die .bashrc in deinem Homeverzeichniss ein, und ab sofort benutzt die Bash diesen Prompt.

Wichtig: Um die Farbcodes kommt immer noch ein \[<farbcode>\]. Dadurch weiss die Bash das die Farbcodes keinen Text ausgeben sondern nur die Farbe ändern. Wenn man diese Zeichen weglässt, kann es zu Anzeigefehlern kommen. In der Tabelle habe ich die \[ und \] schon hinzugefügt.

Code:
Escape-Code	Beschreibung				Beispiel
\u		Username				antu
\h		Hostname				itchy
\t		Zeit					20:22:18
\d		Datum					Sat Mar 25
\n		Zeilenumbruch				Einfach mal Enter drücken ;)
\j		Anzahl der z.Z. verwalteten Prozesse	0, 1, 2, 4, 5, denkt euch ne Zahl aus. :)
\s		Name der Shell				bash
\v		Die Version der Bash			3.1
\w		Das aktuelle Verzeichniss		/usr/portage
\W		Das aktuelle Verzeichniss, ohne Pfad	portage
\$		Als root: # Als User: $			$
\\		ein \					\
\[ und \]	Alles was dazwischen steht wird nicht ausgegeben. Farbcodes gehören zwischen diese Zeichen, sonst kommt es zu Anzeigefehlern. Escape-Codes gehören _nicht_ dazwischen. (Das sind nur die wichtigsten Escape-Codes, eine komplette Liste findet ihr in der Manpage der Bash(man bash))

 

Code:
Farbcode		Farbe
\[\033[30m\]		Schwarz
\[\033[1;30m\]		Dunkelgrau
\[\033[31m\] 		Rot
\[\033[1;31m\]		Hellrot
\[\033[32m\]		Grün
\[\033[1;32m\]		Hellgrün
\[\033[33m\]		Braun
\[\033[1;33m\]		Gelb
\[\033[34m\]		Blau
\[\033[1;34m\]		Hellblau
\[\033[35m\]		Dunkellila
\[\033[1;35m\]		Helllila
\[\033[36m\]		Dunkeltürkis
\[\033[1;36m\]		Türkis
\[\033[37m\]		Hellgrau
\[\033[1;37m\]		Weiss

Farbcode		Hintergrundfarbe
\[\033[XXm\]		Keine Hintergrundfarbe
\[\033[40;XXm\]		Schwarzer Hintergrund
\[\033[41;XXm\]		Roter Hintergrund
\[\033[42;XXm\]		Grüner Hintergrund
\[\033[43;XXm\]		Hellbrauner Hintergrund
\[\033[44;XXm\]		Blauer Hintergrund
\[\033[45;XXm\]		Lila Hintergrund
\[\033[46;XXm\]		Türkis Hintergrund
\[\033[47;XXm\]		Hellgrau Hintergrund

Hinweis: Ich habe ein kleines Skript gebastelt, es zeigt euch alle Farben und die dazugehörigen Colorcodes an. Startet es einfach per "sh <pfad/zum/skript.sh>. Ich hab es angehangen.

Es gibt übrigens auch noch PS2, das erscheint wenn ein Befehl über mehrere Zeilen geht, normalerweise ist das ein '>'. Dann gibt es noch PS3 und PS4, diese werden jedoch nur selten gebraucht, eine Beschreibung für die beiden findet ihr in der Manpage der Bash. Ahjo, manche Farbcodes(die hellen Farben) sind in manchen Terminals fettgedruckt, in der KDE Konsole kann man das in den Farbeinstellungen(siehe 4.) einstellen.

Für die faulen Säcke unter euch *fg* habe ich einige Beispiele erstellt. Die könnt ihr gerne benutzen:

Code:
Prompt 1: export PS1="\[\033[31m\]\t\[\033[0m\] \[\033[1;31m\](\[\033[0m\]\u@\h\[\033[1;31m\])\[\033[0m\] \[\033[1;31m\](\[\033[0m\]\w\[\033[1;31m\])\[\033[0m\] \[\033[31m\]\$\[\033[0m\] "
Prompt 2: export PS1="\[\033[1;33m\][\[\033[1;32m\]\u\[\033[1;33m\]|\[\033[1;32m\]\W\[\033[1;33m\]] \[\033[0;32m\]\$\[\033[0m\] "
Prompt 3: export PS1="\[\033[1;34m\](\[\033[1;31m\]\t\[\033[1;34m\]|\[\033[1;33m\]\u\[\033[1;34m\]) (\[\033[0m\]\w\[\033[1;34m\]) \$ \[\033[0m\]"
Prompt 4: export PS1="[\u@\h:\W]\$ "
Prompt 5: export PS1="\[\033[1;34m\](\[\033[1;36m\]\d\[\033[1;34m\],\[\033[1;36m\] \t\[\033[1;34m\])\[\033[1;35m\]--\[\033[1;34m\](\[\033[1;36m\]\u@\h\[\033[1;34m\])\[\033[1;35m\]--\[\033[1;34m\](\[\033[1;36m\]\j jobs\[\033[1;34m\])\[\033[1;35m\]--\[\033[1;34m\](\[\033[1;35m\]\w\[\033[1;34m\])\n\$ \[\033[1;37m\]"
Prompt 6: export PS1="\[\033[0;31m\][\[\033[1;30m\]\t\[\033[0;31m\]] \[\033[0;31m\][\[\033[0;33m\]\u\[\033[0;31m\]] \[\033[0;31m\][\[\033[1;37m\]\w\[\033[0;31m\]] \[\033[33m\]\$ \[\033[0m\]"
Prompt 7: export PS1="\[\033[1;34m\]{\[\033[1;32m\]\t\[\033[1;34m\]}-\[\033[1;34m\]{\[\033[1;32m\]\u\[\033[1;34m\]}-\[\033[1;34m\]{\[\033[1;36m\]\W\[\033[1;34m\]}-\[\033[1;36m\]> \[\033[0m\]"

Hier findet ihr noch einige weitere Beispiele von möglichen Bashprompts, manche davon sind sehr aufwendig. Hier finden sich auch noch einige Tipps, wie man Uptime, Batteriestatus etc. in den Bashprompt einbauen kann.

2. MOTD, Fortunes, Logos o.Ä. beim Start
Wenn man eine Konsole öffnet wird man sofort mit einem Bashprompt begrüßt, wenn man möchte kann man davor noch irgendeinen Text ausgeben oder irgendwelche Programme ausführen. Man muss das einfach nur in die ~/.bashrc eintragen, alles was dort steht wird ausgeführt bevor der Bashprompt angezeigt wird. Beliebt ist es, beim Öffnen der Konsole ein zufälliges Zitat per fortune auszugeben. Dazu vielleicht noch ein kleines Logo o.Ä. Bei mir sieht das so aus:

Code:
Ausschnitt aus der ~/.bashrc

echo -en "\033[1;35m"
echo '                                          .'
echo '     .vir.                                d$b'
echo '  .d$$$$$$b.    .cd$$b.     .d$$b.   d$$$$$$$$$$$b  .d$$b.      .d$$b.'
echo '  $$$$( )$$$b d$$$()$$$.   d$$$$$$$b Q$$$$$$$P$$$P.$$$$$$$b.  .$$$$$$$b.'
echo '  Q$$$$$$$$$$B$$$$$$$$P"  d$$$PQ$$$$b.   $$$$.   .$$$P´  `$$$ .$$$P´ `$$$'
echo '    "$$$$$$$P Q$$$$$$$b  d$$$P   Q$$$$b  $$$$b   $$$$b..d$$$ $$$$b..d$$$'
echo '   d$$$$$$P"   "$$$$$$$$ Q$$$     Q$$$$  $$$$$   `Q$$$$$$$P  `Q$$$$$$$P'
echo '  $$$$$$$P       `"""""   ""        ""   Q$$$P     "Q$$$P"     "Q$$$P"'
echo '  `Q$$P"                                  """'
echo -e "\033[1;34m"
fortune bofh-excuses chalkboard | awk '{print "              " $0 }'
echo -en "\033[0m"

Und als Bild:

Hinweis: awk '{print " " $0 }' sorgt dafür das die Ausgabe von fortune etwas nach rechts verschoben wird. Diesen Tipp habe ich von LLyric aus dem ##linux Channel auf dem FreeNode IRC-Netzwerk.

Tipp von onkelchen: Man kann solche Schriftzüge wie z.B. mein Gentoo mit dem Programm figleterstellen. Figlet hat eine große Auswahl an verschiedenen "großen Schriftarten".

Hier könnt ihr eurer Fantasie freien Lauf lassen, per echo irgendwelche Grüße ausgeben, per fortune Zitate anzeigen, Mails checken, irgendwelche Ascii-Bilder...

3. Hintergrund ändern
Ein schwarzer Hintergrund ist etwas Langweilig. Warum nicht Blau? Oder irgendein Hintergrundbild? Oder am Besten gleich ganz durchsichtig? Das ist natürlich nur in der grafischen Oberfläche möglich. Wenn du die KDE Konsole benutzt kannst du den Hintergrund unter Settings->Configure Konsole->Schema->Background ändern. Bei dem gnome-terminal kann man den Hintergrund unter Edit->Current Profile->Effects->Background ändern.

4. Standardfarben ändern
Du magst die Standardfarben nicht? Auch das ist kein Problem. Wenn du die KDE Konsole benutzt kannst du diese unter Settings->Configure Konsole->Schema->Colors ändern. Beim gnome-terminal kann man die Farben unter Edit->Current Profile->Colors->Palette ändern.

Meine Konsole mit veränderten Farben:

5. Links/Quellen
man bash
http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html The Linux Documentation Project - Bash Prompt Howto

Das wars erstmal, auch wenn ich irgendwie das Gefühl hab, das ich was wichtiges vergessen hab. *gg*

Have phun,