Bash-Prompt
Mal ein neuer Post zu praktischen Bash-Prompts, nachdem ich den alten doch wieder um einiges überarbeitet habe.Ziele:
- Übersichtlichkeit
- Möglichst lange Eingabezeilen ohne Umbruch
- Prompt soll auf verschiedenen Hosts unterscheidbar sein
- Der Prompt soll möglichst informativ sein.
- Zweizeiliger Prompt, eine Zeile mit vielen Informationen, eine mit nur einem > und der Eingabe dahinter.
- Username und Hostname Farbkodiert, geschieht automatisch ueber eine Hashing-Funktion
- Zeitausgabe ermöglicht es einfach zu sehen wann der Befehl beendet wurde, und damit auch wie lange er gebraucht hat.
- Smiley in der Ausgabe zeigt ob der Befehl korrekt gelaufen ist (Return Code 0 = kein Fehler)
12:59:56 :-) username@hostname:~
Die .bashrc dazu:
>
# If running interactively, then:
if [ "$PS1" ]; then
## aendert den xterm-Titel in das zuletzt benutzte Kommando usw.
xtitle() {
echo -ne "\033]0;[$(history 1 | cut -b 8-30)] $USER@$HOSTNAME:$PWD\007";
}
setps1() {
if [ $? -eq 0 ];then smiley=":-)"; else smiley=":-(";fi
export PS1="\t $smiley \[`hashcolor $USER`\]\u\[$grey\]@\[`hashcolor $HOSTNAME`\]\H\[$grey\]:\[$yellow\]\w\n\[$normal\]> "
}
if [ "${TERM}" != "linux" ]; then
prompt() {
setps1
xtitle
}
else
prompt() {
setps1
}
fi
PROMPT_COMMAND='prompt'
finormal='\e[0m'
black='\e[0;30m'
bblack='\e[1;30m'
red='\e[0;31m'
bred='\e[1;31m'
green='\e[0;32m'
bgreen='\e[1;32m'
yellow='\e[0;33m'
byellow='\e[1;33m'
blue='\e[0;34m'
bblue='\e[1;34m'
purple='\e[0;35m'
bpurple='\e[1;35m'
blue2='\e[0;36m'
bblue2='\e[1;36m'
white='\e[0;37m'
bwhite='\e[1;37m'
grey='\e[0;39m'
bgrey='\e[1;39m'bgnorm='\e[0;0m'
bgblack='\e[0;40m'
bgred='\e[0;41m'
bggreen='\e[0;42m'
bgyellow='\e[0;43m'
bgblue='\e[0;44m'
bgpurple='\e[0;45m'
bgblue2='\e[0;46m'
bggrey='\e[0;47m'function hashcolor {
case $(echo $1|md5sum|cut -b 1) in
0)echo -en $red;;
1)echo -en $bblue;;
2)echo -en $green;;
3)echo -en $bgrey;;
4)echo -en $yellow;;
5)echo -en $byellow;;
6)echo -en $blue;;
7)echo -en $bred;;
8)echo -en $purple;;
9)echo -en $bpurple;;
a)echo -en $blue2;;
b)echo -en $bblue2;;
c)echo -en $grey;;
d)echo -en $bgreen;;
e)echo -en $white;;
f)echo -en $bwhite;;
esac
}
Die interessanten Manpages zu dem Thema sind:
- man console_codes erklärt die Escape Codes z.B. für Farben oder auch um den Titel eines X-Terminals zu ändern.
- man bash erklärt, dass man Farbcodes in \[...\] einschliessen sollte, damit sie den Zeilenumbruch im Prompt nicht kaputt machen.
| Kategorien | Software Linux |
|---|---|
| Tagged | Bash Prompt color farben |
3 Kommentare
hallo, kleiner Tipp am Rande: ich würde kein ">" in einem Prompt verwenden. Benutzt man nämlich den Mauspuffer, um alte Zeilen zu kopieren, kann es passieren, dass man aus Versehen das ">" aus dem Prompt mitnimmt (ist einem Kollegen mal passiert). Effekt: PROMPT > ./pfad/zu/meinem/skript Markieren -> mit mittlerer Maustaste einfügen -> ausführen (gegebenfalls automatisch, falls das Newline mitkopiert wird) -> das ">" wird von der Shell als Pipe interpretiert und PROMPT wird in dein Skript geschrieben, bzw. das Skript wird gelöscht. Viele Grüße, Florian
Je nach Terminal kann man die Zeichen, die mitkopiert werden und wo die Markiergrenze ist einstellen. Aber es kann natürlich jeder seine Promptzeichen setzen wie er will, soll hier ja nur mal eine Anregung sein :).
mein Prompt ist vglw. ähnlich, ich benutz dazu noch eine lange Trennlinie: -------------------------------------------------------------------------------- 501 16:29:46 andre ~/downloads $