Nützliche Dinge die man mit der Bash machen kann

Farbe im Prompt

Um in der Bash sein Prompt einzufärben braucht man im Prinzip nur ein paar Zeichen in die Variable PS1 einzufügen: \e[xx;yym. xx und yy sind hierbei dann Zahlen die Vorder- und Hintergrundfarbe bestimmen; 31;40 ergibt Rot auf Schwarz. Hintergrundfarbe 1 bedeutet im Endeffekt sowas wie transparent ;-)
Wer also ein Prompt dieser Art

root@host:~ #

haben will schreibt einfach \e[31;1mroot\e[0m@\h:\w in die Variable PS1 rein. Damit das auch bei jedem Prompt ausgeführt wird kommt der entsprechende Aufruf von export PS1="\e[31;1mroot\e[0m@\h:\w" in die Datei $HOME/.bashrc .

Verzeichnisnamen im Prompt abschneiden

Das oben aufgeführte Prompt hat aber ein Problem: wenn man sich in einem Verzeichnis wie zum Beispiel /usr/src/linux-2.4.21/arch/mips/galileo-boards/ev64120/compressed befindet ist der ganze Bildschirm mit Prompt vollgeschrieben, es bleibt kaum Platz zum Arbeiten. Eine Möglichkeit ist jetzt natürlich sich nicht den ganzen Verzeichnisbaum anzeigen zu lassen (\w), sondern nur das letzte Verzeichnis (\W). Dabei geht - mir zumindest - aber immer die Übersicht verloren - diese Methode ist also nicht praktikabel.
Sinnvollerweise würde man also zum Beispiel nur die letzten 20 Zeichen des Verzeichnisbaumes anzeigen wollen. Hier also ein Listing das $PWD (in $PWD steht das aktuelle Verzeichnis) nimmt und auf eine akzeptable Länge kürzt wenn nötig.
#!/usr/local/bin/bash
# /usr/local/bin/pwdtrunc - truncates $PWD, writes to /tmp/pwdtrunc.$EUID
# Mainly from Bash-Prompt-HOWTO, enhanced by Tilman Brock

# How many characters of the $PWD should be kept
pwdmaxlen=25

# Indicator that there has been directory truncation:
trunc_symbol=".."

###
if [ ${#PWD} -gt $pwdmaxlen ]
then
  pwdoffset=$(( ${#PWD} - $pwdmaxlen ))
  newPWD="${trunc_symbol}${PWD:$pwdoffset:$pwdmaxlen}"
else
  newPWD=${PWD}
fi
nPWD="`echo $newPWD | sed -e s=$HOME=~=` "
echo $nPWD > /tmp/pwdtrunc.$EUID

Jetzt braucht man nur noch die Variable $PROMPT_COMMAND auf pwdtrunc zu setzen, dann wird vor jedem Prompt der jeweils gültige Wert in /tmp/pwdtrunc.$EUID geschrieben (der Befehl, der in $PROMPT_COMMAND steht wird vor der Darstellung jeder Prompt-Zeile ausgeführt). Setzt man $PS1 jetzt auf z.B. \u@\h: $(cat /tmp/pwdtrunc.$EUID), dann hat man ein Prompt was nicht unendklich wächst. Wichtig ist dabei der Aufruf von cat /tmp/pwdtrunc.$EUID, denn erst dadurch wird der gekürzte Teil des Verzeichnisses angezeigt.
Toll, nicht?

Links

http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x768.html
http://www-106.ibm.com/developerworks/linux/library/l-tip-prompt/

© 08.04.2002 by Tilman