Bash-Konfiguration, die zweite

Zusammenfassung

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!

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Die Bash, das unbekannte Wesen
    Es gibt neben den Pipes noch verschiedene andere Verfahren, um mehrere Shell-Befehle miteinander zu verbinden bzw. sie parallel auszuführen. Die wichtigsten Methoden werden in dieser Folge der Bash-Serie vorgestellt.
  • Teil 1: Grundlagen der BASH
    Haben Sie auch schon einmal am Computer gesessen und sich über immer wiederkehrende Arbeit geärgert, die man mit einem kleinen Programm vereinfachen könnte? Im ersten Teil unseres Programming Corners steigen wir in die Welt der Programmierung ein.
  • Tricks für die Bash
    Mit ein paar grundlegenden Kniffen bringen Sie Schwung und Farbe in die Arbeit auf der Kommandozeile.
  • Bash-Kurs Teil 6
    Die elementaren Konfigurationsmöglichkeiten mit eingebauten Funktionen der Bash sind der Schwerpunkt dieses Teils. Im nächsten wird ein komfortables Tool zur Erzeugung von Konfigurationsdateien vorgestellt.
  • Zu Befehl: bash, bc
    Es muss nicht immer ein grafischer Taschenrechner wie xcalc oder KCalc sein – auch die Bash beherrscht einfache arithmetische Operationen, und für die fortgeschrittenen Mathematiker gibt's bc.
Kommentare

Infos zur Publikation

LU 12/2017: Perfekte Videos

Digitale Ausgabe: Preis € 5,95
(inkl. 19% MwSt.)

LinuxUser erscheint monatlich und kostet 5,95 Euro (mit DVD 8,50 Euro). Weitere Infos zum Heft finden Sie auf der Homepage.

Das Jahresabo kostet ab 86,70 Euro. Details dazu finden Sie im Computec-Shop. Im Probeabo erhalten Sie zudem drei Ausgaben zum reduzierten Preis.

Bei Google Play finden Sie digitale Ausgaben für Tablet & Smartphone.

HINWEIS ZU PAYPAL: Die Zahlung ist ohne eigenes Paypal-Konto ganz einfach per Kreditkarte oder Lastschrift möglich!

Stellenmarkt

Aktuelle Fragen

Huawei
Pit Hampelmann, 13.12.2017 11:35, 1 Antworten
Welches Smartphone ist für euch momentan das beste? Sehe ja die Huawei gerade ganz weit vorne. Bi...
Fernstudium Informatik
Joe Cole, 12.12.2017 10:36, 2 Antworten
Hallo! habe früher als ich 13 Jahre angefangen mit HTML und später Java zu programmieren. Weit...
Installation Linux mint auf stick
Reiner Schulz, 10.12.2017 17:34, 3 Antworten
Hallo, ich hab ein ISO-image mit Linux Mint auf einem Stick untergebracht Jetzt kann ich auch...
Canon Maxify 2750 oder ähnlicher Drucker
Hannes Richert, 05.12.2017 20:14, 4 Antworten
Hallo, leider hat Canon mich weiterverwiesen, weil sie Linux nicht supporten.. deshalb hier die...
Ubuntu Server
Steffen Seidler, 05.12.2017 12:10, 1 Antworten
Hallo! Hat jemand eine gute Anleitung für mich, wie ich Ubuntu Server einrichte? Habe bisher...