Home / LinuxUser / 2001 / 03 / Bash-Konfiguration, die zweite

Newsletter abonnieren

Lies uns auf...

Folge LinuxCommunity auf Twitter

Top-Beiträge

KDE Plasma Workspaces 4.8
(306 Punkte bei 32 Stimmen)
SUSE12
(173 Punkte bei 4 Stimmen)
Pardus Linux am Ende?
(164 Punkte bei 4 Stimmen)
OpenSuse 12.1-Service Kit 01/12
(161 Punkte bei 4 Stimmen)
Meinst Du: Patch CD Updates?
(161 Punkte bei 4 Stimmen)

Heftarchiv

LinuxUser Heftarchiv

EasyLinux Heftarchiv

Ubuntu User Heftarchiv

Ubuntu User Heftarchiv

Partner-Links:

Shopping
Topsuche
 
Yatego Deutschlands größte Shoppingmall. 10000 Shops,
3.5 Mio Artikel. Alle Bestseller, Servertechnik und Technik Themenwelten.

Notebooks und Netzwerkhardware bei Mercateo günstig kaufen.
Internet Telefonie mit VoIP Telefonen von Gigaset
Das B2B Portal www.Linx.de informiert über Produkte und Dienstleistungen.
Günstige Digitalkameras finden Sie im Preisvergleich.

Zusammenfassung

Bash-Konfiguration, die zweite

01.03.2001 In diesem zweiten Teil der Serie über die Konfiguration der Bash wird es noch einmal praktisch: Das Einstellen des Prompts, und die für die Fehlersuche so nützlichen Tracing-Modi werden beschrieben.

In den letzten Teilen wurden immer wieder die unterschiedlichen Konfigurationsmöglichkeiten der Bash kurz vorgestellt. In diesem Teil werden sie systematisch zusammengefaßt und anhand von Beispielen näher erläutert.

Es gibt sechs Möglichkeiten, das Verhalten der Bash voreinzustellen bzw. das Programm zu konfigurieren:

  • Über Befehlszeilenoptionen, die beim Aufruf der Bash bestimmte Modi einstellen oder andere Aktionen auslösen.
  • Variablen beeinflussen das Verhalten der Bash in vielen Bereichen.
  • Der Befehlszeileneditor kann durch die Funktionen der Readline-Library konfiguriert werden.
  • Shell-Optionen werden mit dem eingebauten set-Befehl angezeigt und verändert.
  • für die Verwendung erweiterter Shell-Optionen gibt es den eingebauten shopt-Befehl.
  • Funktionen und Alias-Definitionen können den Aufruf externer Befehle verhindern und stattdessen andere Aktionen ausführen.

Alle diese Konfigurationsmöglichkeiten können wahlweise interaktiv (und damit temporär) erfolgen oder in den Konfigurationsdateien dauerhaft deklariert werden.

Befehlszeilenoptionen der Bash

Beim Aufruf der Bash können wie bei den meisten GNU-Programmen Optionen im zwei Formaten angegeben werden: Die Kurzoption -v bewirkt, dass ausführlichere Meldungen angezeigt werden. Dasselbe läßt sich auch durch die Langform -verbose erreichen. Die Kurzoptionen werden hauptsächlich für Moduseinstellungen (Optionen -abefhkmnptuvxBCHP und -o verwendet.

Die wichtigsten Befehlszeilenoptionen der Bash sind:

  • -help: eine kurze Hilfe anzeigen.
  • -login: die Shell immer als Login-Shell starten und damit die entsprechenden Konfigurationsdateien einlesen.
  • -noprofile: als Login-Shell keine Konfigurationsdateien einlesen.
  • -noediting: die Editier-Funktionen der Readline-Library deaktivieren.
  • -rcfile: die im Argument angegebene Datei als Konfigurationsdatei einlesen.
  • -c (commands): die im Argument angegebenen Befehle ausführen, nachdem alle anderen Optionen berücksichtigt wurden.
  • -i: (interactive) die Bash als interaktive Shell starten und damit die entsprechenden Variablen setzen.
  • -r oder -restricted: nur eine kleine Gruppe von Befehlen kann in diesem Modus verwendet werden, alle anderen Funktionen (etwa zum Wechseln der Verzeichnisses, zum Setzen von Variablen usw.) sind deaktiviert.
  • -: alles was in der Befehlszeile rechts noch folgt, wird nicht mehr als Option für die Bash interpretiert.

Konfiguration durch Variablen

Die vielen Variablen der Bash wurden in den letzten Teilen schon mehrfach angesprochen, da sie die unterschiedlichsten Aspekte der Shell betreffen. Bisher nicht angesprochen wurden die Möglichkeiten, den Bash-Prompt zu konfigurieren. Über die Umgebungsvariablen $PS1 bis $PS4 können vier unterschiedlichste Prompt-Darstellungen definiert werden.

*

$PS1 wird als normaler Prompt verwendet, wie er nach dem Ausführen einer Befehlszeile als Eingabeaufforderung für weitere Befehle erscheint. Dieser Prompt wird von Anwendern oft individuell eingestellt, wie dies unten ausführlich gezeigt wird.

  • $PS2 wird angezeigt, wenn eine Befehlszeile mittels [RETURN] umbrochen wird, aber noch nicht abgeschlossen ist, weil beispielsweise noch die schließende Klammer oder Quotes fehlen. Die Voreinstellung besteht aus einem fordernden > .
  • $PS3 wird vom eingebauten select-Befehl verwendet und weist den Anwender auf verschieden Wahlmöglichkeiten hin. Voreingestellt ist #? .
  • $PS4 erscheint nur im Tracing-Modus, also dann, wenn die Befehlszeilen vor der Bearbeitung angezeigt werden.

In den Prompt-Variablen können neben normalen Zeichen auch Steuerzeichen für das Terminal und einige spezielle Schlüssel verwendet werden, die durch die Bash ausgewertet werden und deren Ergebnis dann im Prompt erscheint. Tabelle 1 enthält eine Zusammenfassung dieser Schlüsselzeichen.

$> export PS1='\d_\t>'
 Thu Jan 18_02:14:35>     
 $> export PS1='\#$'
 120$   

Wird durch \a das Bell-Zeichen in den Prompt aufgenommen, ertönt jedesmal die Display-Klingel (auf Dauer nervt das aber ganz schön…)

Weiterhin stehen die üblichen Variablen der Shell zur Verfügung. Dabei ist die Fehlervariable $? besonders nützlich. Mit ihr wird der Rückgabewert (Return code) des letzten Befehls dargestellt:

$> export PS1='$?>'
 0> ls irgend-ein-Quatsch
 1>

Sofern keine Datei oder kein Verzeichnis mit dem Namen irgend-ein-Quatsch vorhanden ist, erzeugt der Befehl einen Rückgabewert von 1. Dieser kann in einem Script ausgewertet werden; in einer interaktiven Shell ist er normalerweise nicht sichtbar. Mit dem oben verwendeten Prompt wird dieser Wert angezeigt.

Am Rande ein kleiner Tip von Edgar Greuter: wann immer die Konfiguration des Terminals durch die versehentliche Ausgabe einer Binärdatei verstellt wurde, hilft oft die Eingabe von [Ctrl][o]. Diese Zeichenkette kann an das Ende des $PS1-Prompts angefügt werden:

$> export PS1=$PS1^O

Achtung: vor der Eingabe von [Ctrl][o] auf einem Terminal (oder in einem Editor, der das Terminal verwendet) muß [Ctrl][v] eingegeben werden, damit die Zeichenkette ^O in die Variable aufgenommen wird.

Befehle können übrigens auch für die Konstruktion der Prompts genutzt werden, wie folgendes Beispiel zeigt:

PS1="\\[\\033]0;\\u@\\h:\\w\\007\\][\$(date +%H%M)][\\033[1;m\\u@\\033[7;m\\h\\033[0m:\\w]\$ "

Dieser Prompt macht ausgiebigen Gebrauch von den Möglichkeiten durch Steuerzeichen bestimmte Teile der Ausgabe fett bzw. invers anzuzeigen. Die doppelten Backslash-Zeichen bewirken, dass dieses Zeichen selbst in die Variable aufgenommen wird. Das Ergebnis sieht dann folgendermaßen aus:

Die aktuelle Uhrzeit wird dabei durch den implizit ausgeführten Befehl date +%H%M ermittelt. Die Konstruktion $() bewirkt, dass der Inhalt der Klammern ganz zuerst ausgeführt wird und dass dieses Ergebnis dann in die Befehlszeile übernommen wird.

Nicht vergessen sollte man im Zusammenhang mit der Konstruktion von Prompt-Variablen die Umgebungsvariable $PROMPT_COMMAND. Der Inhalt dieser Variablen wird vor der Ausgabe des $PS1-Prompts immer ausgeführt. Damit stehen einem geschickten Shell-Programmierer sehr weitreichende Möglichkeiten offen. Er kann beispielsweise ein im aktuellen Verzeichnis vorhandenes Script (oder einen beliebigen Befehl) automatisch ausführen, er kann die History der Shell speichern und so die durchgeführten Aktionen automatisch protokollieren, er kann den Prompt immer wieder abhängig von bestimmten Gegebenheiten ändern usw. Oft wird diese Variable eingesetzt um - beispielsweise - die Titelzeile von Terminalfenstern mit dem Rechnernamen ($HOSTNAME) und dem aktuellen Verzeichnis ($PWD) zu verzieren:

> export PROMPT_COMMAND='echo -ne "\033]2;$HOSTNAME:$PWD$\007"'

Diese Methode funktioniert bei fast allen xterm-ähnlichen Terminalemulatoren, einschließlich rxvt und den KDE-Varianten.

Doch Achtung: PROMPT_COMMAND-Befehle sollten nur kleine, schnelle Aktionen ausführen, damit sich die Bearbeitung nicht unnötig verzögert. Und: nicht jeder Automatismus ist auch wirklich sinnvoll, manchmal ist weniger mehr… $? wird übrigens durch die PROMPT_COMMAND-Befehle beeinflußt!

Einem Freund empfehlen    Druckansicht Bookmark and Share
Kommentare

1213 Hits
Wertung: 0 Punkte (0 Stimmen)

Schlecht Gut

Infos zur Publikation

Infos zur Publikation

title_2012_02

Aktuelle Ausgabe kaufen:

Heft bestellen Heft als PDF kaufen

LinuxUser erscheint monatlich und kostet in der Nomedia-Ausgabe EUR 5,50 und mit DVD EUR 8,50. Weitere Informationen zum Heft finden Sie auf der LinuxUser-Homepage.

Im LinuxUser-Probeabo erhalten Sie drei Ausgaben für 3 Euro. Das Jahresabo (ab EUR 56,10) können Sie im LNM-Shop bestellen.

Tipp der Woche

Knoppix: Bootvorgang mit Cheatcode beschleunigen
Knoppix: Bootvorgang mit Cheatcode beschleunigen
Marcel Hilzinger, 18.01.2012 21:05, 0 Kommentare

Die Bootsequenz der Live-Distribution sucht beim Start zunächst auf Festplatten, dann auf USB-Sticks und erst dann in den DVD-Laufwerken (/dev/sr* oder /dev/scd*) nac...

Aktuelle Fragen

OpenSuse 12.1-Service Kit 01/12
Christoph-J. Walter, 28.01.2012 08:52, 2 Antworten
Hallo Gemeinde, ich habe 12.1 neu installiert. Alles in Ordnung! Nun möchte ich das Service Kit (...
Ubuntu 11.10 konfigurieren
Michael Hinz, 27.01.2012 17:52, 0 Antworten
Ubuntu läuft bei mir. Allerdings nur, wenn die Daten-CD eingelegt ist. Unabhängig von Bios-Einste...
SUSE12
Jörg Müller, 25.01.2012 14:27, 5 Antworten
Hallo Gemeinde Ich habe schon ziemlich lange auf einem Rechner Linux laufen, bin also nicht ganz...
Hat jemand Erfahrung beim Einsatz einer Kinect / OpenNI?
GoaSkin , 24.01.2012 23:35, 0 Antworten
Hallo, ich habe mir eine Kinect zugelegt, um zu schauen, was man damit unter Linux so machen k...
Kollaboration - Zeichnen auf mehreren Geräten gleichzeitig
Ludwig jun. B., 19.01.2012 11:17, 4 Antworten
Schönen guten Tag, ich suche aktuell eine Software für Linux/Windows (eines von beiden), welch...