Kommandozeile - kurze Pfadangabe im Prompt der bash

Post Reply
Message
Author
Marco Gerber
Posts: 38
Joined: 26. Aug 2006 13:07
Location: Zürich

Kommandozeile - kurze Pfadangabe im Prompt der bash

#1 Post by Marco Gerber »

Guten Tag

Wer oft an einem Terminal arbeitet, wird schnell feststellen, dass der Prompt mit der Verzeichnistiefe in welcher man arbeitet sehr schnell unuebersichtlich wird.
Das liegt daran, dass die meisten Distributionen eine solche Vorkonfiguration waehlen. Es folgt ein Beispiel:

Code: Select all

user@host /home/user/music/mp3/grave_digger/tunes_of_war :~ $
Obwohl der Inhalt dieses Verzeichnisses ausgezeichneten Sound beinhaltet, wird das Problem sehr schnell klar, will man dort noch etwas arbeiten.

Die bash stellt eine umfangreiche Variablensammlung bereit, um das Verhalten (beispielsweise das Aussehen des Prompt) zu konfigurieren.

Dazu kennt die bash insbesondere die folgenden Variablen:

PS1 : Dient zur Darstellung des Prompt, wie er nach dem Ausfuehren eines Befehles (Befehlsfolge) als Eingabeaufforderung erscheint.
PS2 : Ist ein Befehl grammatikalisch betrachtet noch nicht fertig, und wird ein Zeilenumbruch mittels ENTER ausgefuehrt, wird diese Variable zur Anzeige benutzt. Beispielsweise das Zeichen '>':

Code: Select all

sed -e 's/linux/Gnu\/&/
> g'
PS3 : wird vom internen select Befehl verwendet. Default ist #?
PS4 : interessante Verwendung im Zusammenhang mit dem Tracing Modus der bash

Fuer uns interessant ist an dieser Stelle der Inhalt der Variablen PS1, sie definiert das Aussehen der Kommandozeile.
Sie wird meist in der Datei /home/user/.bashrc (oder abgekuerzt ~/.bashrc) definiert.
Das folgende Beispiel zeigt zuerst die ausfuehrliche Variante, mit Angabe des gesamten Pfades, und dann wie man den Pfad nur noch mit dem letzten Verzeichnis aus ${PWD} darstellt:

Code: Select all

PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \w \$\[\033[00m\] '

Fuehrt zu:
user@host ~/music/mp3/grave_digger/tunes_of_war $ 

Code: Select all

PS1='\[\033[01;32m\]\u@\h\[\033[01;34m\] \W \$\[\033[00m\] '

Fuehrt zu:
user@host tunes_of_war $ 
Anzumerken ist, dass in den obigen Beispielen der Teil 'user@hostname' gruen darsgestellt wird ( \[\033[01;32m\] ) und der Pfad blau ( \[\033[01;34m\] ).


Neben den PSx Variablen kennt die Bash noch die Umgebungsvariable PROMPT_COMMAND.
Diese wird jedesmal vor der Ausgabe von PS1 ausgefuehrt. Sie dient dazu, auf Zustandsabhaengige Variablen (im allgemeinen) zu reagieren. Beispielsweise kann beim Betreten eines Unterverzeichnisses damit jedesmal ein ls Kommando ausgegeben werden, oder andere nuetzliche Spielereien (allgemein beispielsweise die Ausfuehrung eines Scripts veranlassen).
In diesem Beispiel moechte ich den oben aufgetretenen Nebeneffekt, dass man vielleicht nicht mehr weiss wo genau man sich nun im Dateisystem befindet (man hat ja nur noch den letzten Teil angezeigt) ausgleichen.
Die meisten Terminals benutzen den Inhalt dieser Variablen, um in der Fensterleiste den Titel des Fensters damit zu setzen.
Es bietet sich also an, hier den gesamten Pfad auszugeben, so dass man zwar einen schlanken Prompt hat, aber dennoch die Information, wo genau man sich befindet aus der Titelleiste des Terminalfensters ablesen kann.

Code: Select all

PROMPT_COMMAND='echo -ne "\033_${USER}@${HOSTNAME}:${PWD/$HOME/~}\033\\"'
Die Fensterleiste des Terminals sieht dann so aus:

Code: Select all

user@host ~/music/mp3/grave_digger/tunes_of_war

Abschliessend moechte ich den Leser ermuntern, sich selber mit den Variablen der Bash zu befassen. Hierfuer eignen sich die Google Keywords:

Code: Select all

intitle:bash variable HOWTO
viel Spass damit...

Marco

Post Reply