Immer gut in Schale

Konfiguration der Bash

01.03.2003
Für viele Einsteiger ist die Shell ein Mysterium, das fortgeschrittenen Anwendern und Linux-Gurus vorbehalten bleibt. Dabei verbirgt sich hinter dem Prompt ein flexibles Programm, mit dem Anwender beinahe jede Aufgabe lösen können.

Die Geschichte der Unix-Shells begann Ende der sechziger Jahre. Zu dieser Zeit entwickelten Ken Thompson und Dennis Ritchie das Betriebssystem Unix. Allerdings fehlte den beiden Entwicklern eine Benutzerschnittstelle zwischen System und Anwender.

Diese Schnittstelle sollte Informationen zwischen dem Betriebssystem und dem Benutzer vermitteln. Auf der Tastatur eingegebenen Befehle sollten ebenso vom Rechner verstanden werden wie die Mitteilungen der Maschine vom Menschen. Darum nennt man die Shell auch einen Kommandointerpreter.

In diese Lücke trat Stephen R. Bourne mit seiner Arbeit. Die Bourne-Shell (auch AT&T-Shell oder schlicht sh genannt) ist mittlerweile die klassische Unix-Shell. Sie ermöglichte die Arbeit mit Skripten, war jedoch in der interaktiven Funktionalität etwas unhandlich. So war eine History-Funktion, um bereits eingegebene Kommandos einzusehen und zu bearbeiten, weder implementiert noch vorgesehen. Nach und nach folgten weitere Entwicklungen wie die Korn-Shell (ksh) und die C-Shell (csh).

Als Richard Stallman Anfang der achtziger Jahre das GNU-Projekt in Angriff nahm, stand er vor einer ähnlichen Schwierigkeit wie seinerzeit Thompson und Ritchie: Er benötigte eine Schnittstelle.

Also schrieb er kurzweg seinen eigenen Befehlsinterpreter und nannte ihn Bash. Dieser Name ist Akronym und Wortspiel zugleich und bedeutet Bourne Again Shell. Die Bash basiert mit ihrem Befehlsaufbau zwar auf der Bourne-Shell, vereinigt aber auch Elemente von Korn- und C-Shell in sich.

Neben der Verarbeitung von Befehlen unterstützt die Bash den Anwender durch den Aufruf von anderen Programmen. Mit ihrer ausgefeilten Programmiersprache versetzt sie den User außerdem in die Lage, komplexe Arbeitsabläufe durch Skripte zu automatisieren.

Wenn Sie eine gängige Distribution verwenden, schwimmen Sie geradezu in einem Pool von Shell-Skripten, die unbemerkt im Hintergrund werkeln. Diese Dateien erkennen Sie an den Zeichenfolgen #!/bin/bash oder #!/bin/sh in der ersten Zeile. Der Ausdruck nennt den Pfad zum Kommandointerpreter und wird in Programmiererkreisen Shebang (zusammengesetzt aus Sharp, "#" und Bang, "!") genannt.

Tasten und Modi

Befehle, die Sie in die Kommandozeile tippen, lassen sich bequem verändern, bevor Sie sie durch die Return-Taste ausführen. Zwei Arten der Texteditierung stehen Ihnen zur Verfügung: Der Vi- und der Emacs-Modus. Diese beiden Standard-Editoren unter Unix verwenden eine Reihe von Tastenkürzeln zum Löschen, Eingeben oder Suchen, die Ihnen auch die Bash zur Verfügung stellt.

Je nachdem, welchen Editor Sie lieber verwenden, schalten Sie die GNU-Shell um: Der Befehl set -o vi wechselt in den Vi-Modus, mit set -o emacs gelangen Sie zurück in den voreingestellten Emacs-Modus.

In Abbildung 1 können Sie den Wechsel beobachten. Das Kommando bind -vgrep keymap zeigt Ihnen, in welchem Modus Sie sich befinden. Der Einfachheit halber beschränken wir uns in diesem Artikel auf den Emacs-Modus.

Abbildung 1: Wir wechseln den Editor-Modus der Bash

Schauen wir uns einige Beispiele der Tastenkürzel an. Der Druck auf [Alt-t] vertauscht zwei Wörter vor der Cursor-Position. Mit den Rauf-/Runter-Pfeiltasten wandern Sie durch zuletzt eingegebene Kommandos. Die [Tab]-Taste schließlich expandiert Befehl- oder Dateinamen, und [Strg-r] sucht nach früheren Eingaben. Tabelle 1 zeigt die wichtigsten Tastaturbelegungen in der Übersicht.

Tabelle 1: Emacs-Tastaturbelegung der Bash

[Strg-r] Suche nach Kommandos
[Strg-l] Bildschirm löschen
[Tab] Komplettieren von Befehlen und Dateien
[Strg-e] Cursor ans Zeilenende
[Strg-a] Cursor zum Zeilenanfang
[Strg-u] Eingabe löschen
[Strg-k] Eingabe ab Cursor löschen
[Strg-d] Zeichen unter dem Cursor löschen
[Alt-t] Wörter vor dem Cursor vertauschen
[Alt-b] Cursor ein Wort zurück
[Alt-f] Cursor ein Wort vor

Die Einstellungen zur Tastaturbelegung liegen global in der Datei /etc/inputrc oder für den einzelnen User in ~/.inputrc. Um es gleich vorneweg zu sagen: Die genannten Konfigurationsdateien speichern nicht ausschließlich die Einstellungen der Bash. Durch sie wird eine Funktion namens Readline gesteuert, auf die auch andere Programme (z. B. GNU-Plot, der GNU Debugger gdb oder auch Sax2 und Smbclient) zugreifen. Lassen Sie uns einen Blick in die Datei /etc/inputrc werfen, um ihren Aufbau zu studieren. Sie werden dort Einträge der folgenden Form finden:

# /etc/inputrc Beispieldatei
set meta-flag on
set output-meta on
set convert-meta off
"\e[A":         previous-history
"\e[4~":        end-of-line

Die ersten drei mit set beginnenden Zeilen setzen Readline-Variablen. Der Eintrag set meta-flag on erlaubt Ihnen die Eingabe von 8-Bit-Zeichen (also beispielsweise deutsche Sonderzeichen). Die Anweisung set output-meta on gestattet der Shell die Ausgabe eben dieser Zeichen. Die letzte Variable convert-meta off verhindert eine unerwünschte Zeichenkonvertierung. Wie Sie sicher schon erraten haben, eröffnen Ihnen die Variablen die Verwendung von Umlauten in der Kommandozeile.

Die Zeilen darunter sind hingegen nicht so leicht zu entschlüsseln. Die Funktion previous-history blättert rückwärts in der Liste der vormals eingegebenen Kommandos. "\e[A" legt den Parameter auf Pfeil-Oben-Taste, wobei \e das Escape-Zeichen ist. Zum Verständnis dieser Konfiguration hilft Ihnen ein Tool wie showkey, das durch den Druck auf die Pfeil-Oben- und die Zeilenende-Taste folgendes anzeigt:

[andreas]~ > showkey -a
^[[A     27 0033 0x1b
         91 0133 0x5b
         65 0101 0x41
^[[4~    27 0033 0x1b
         91 0133 0x5b
         52 0064 0x34
        126 0176 0x7e

Die Ausgabe ^[[4~ entspricht der Definition "\e[4~" in der Datei /etc/inputrc. Sie beschreibt mit der Funktion end-of-line die Cursor-Bewegung ans Zeilenende. ^[[4~ beziehungsweise "\e[4~" entspricht der Taste [Ende]. Unser Beispiel kann von der Ausgabe in Ihrem konkreten Fall in Einzelheiten abweichen, da auch die Konfiguration des X Servers hier eine Rolle spielt. Als Alternative zu showkey bieten sich die Programme xev und xkeycaps auf der grafischen Oberfläche an.

Doch lassen wir es an dieser Stelle mit der Konfigurationsdatei bewenden und experimentieren mit weiteren Einstellungen: dem Befehl bind. Wenn Sie sich detaillierter mit dem Thema Readline-Library auseinandersetzen möchten, bietet Ihnen das System mit man readline das Manual an.

Abbildung 2: Bash-Kommandoexpansion durch die Tabulatortaste

Gebundenes und Entbundenes

Um während der Arbeit in der Shell die Tastenbelegung anzupassen, liefert Ihnen der Befehl bind ein bequemes Verfahren. Mit der Option -P zeigt Ihnen das Kommando beispielsweise eine Liste der aktuellen Bindungen:

[andreas]~ > bind -P | less
abort can be found on "\C-g", "\C-x\C-g", "\e\C-g".
accept-line can be found on "\C-j", "\C-m".
backward-char can be found on "\C-b", "\e[D".
backward-delete-char can be found on "\C-h", "\C-?".
[…]

In unserem Beispiel wird die Ausgabe des Befehls bind -P durch das Zeichen an den Pager less geleitet, damit Sie darin scrollen und lesen können. Fachchinesen nennen diese Art der Kommandoverbindung eine Pipe.

Im obigem Beispiel sehen Sie, dass die Funktion backward-char ausgelöst wird durch die Tasten [Strg-b] oder Pfeil-Links ausgelöst. Die Angabe \C entspricht der Strg-Taste.

Um selber während des Betriebs Tasten neu zu belegen, verwenden Sie den Befehl bind Taste Funktion. Vielleicht haben Sie bereits bemerkt: Die Tastenkombination [Strg-l] löscht den Bildschirm und stellt die Eingabeaufforderung wieder her. Nun nehmen wir uns vor, die Funktion des Refresh an eine neue Tastenkombination zu binden. Zuerst basteln wir uns wieder eine Pipe. Diesmal mit dem Kommando grep, das die Zeile mit der Zeichenkombination C-l herausfiltert:

[andreas]~ > bind -p | grep "C-l"
"\C-l": clear-screen

Zur Tastenkombination [Strg-l] gehört also die Funktion clear-screen. Zwecks Gegenprobe rufen wir die Funktion mit der Bind-Option -q auf. Der Parameter -q steht für Query, und das bedeutet soviel wie Anfrage. Damit finden Sie heraus, welche Tastenkombination an eine Funktion gebunden ist:

[andreas]~ > bind -q clear-screen
clear-screen can be invoked via "\C-l".

Jetzt lösen wir die Funktion clear-screen durch den Parameter -u (unbind). Um zu testen, ob die Änderung wirksam ist, greifen wir danach erneut zur Query-Option:

[andreas]~ > bind -u clear-screen
[andreas]~ > bind -q clear-screen
clear-screen is not bound to any keys.

Im nächsten Schritt verwenden wir die bereits genannte Formel bind Taste Funktion und vergewissern uns, dass nun [Strg-t] den Bildschirm reinigt:

[andreas]~ > bind '"\C-t" clear-screen'
[andreas]~ > bind -q clear-screen
clear-screen can be invoked via "\C-t".

Auf diese Weise löscht nicht mehr [Strg-l], sondern [Strg-t] die Oberfläche der Bash. Allerdings wurde die Funktion transpose-chars (Vertauschen zweier Buchstaben unter dem Cursor) überschrieben. Achten Sie daher darauf, dass Sie nicht bestehende Bindings überschreiben.

Um weitere Bind-Optionen herauszufinden, können Sie in Tabelle 2 nachsehen oder die umfangreiche Anleitung mit man bashbuiltins aufrufen.

Tabelle 2: Bind-Optionen

bind -f [Datei] Liest [Datei] als Konfigurationsdatei ein
bind -l Auflistung aller Funktionen
bind -p Listet Funktionen und Bindings wiederverwertbar auf
bind -P Einfache Auflistung von Funktionen und Bindings
bind -q Erfragt die Tastenkombination zur Funktion
bind -r Taste Entbindet die Tasten von allen Funktionen
bind -u Funktion Hebt die Tastenkombination für diese Funktion auf
bind -V Zeigt die Readline-Variablen an

LinuxCommunity kaufen

Einzelne Ausgabe
 
Abonnements
 

Related content

  • 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.
  • Dr. Linux
    Komplizierte Organismen, wie Linuxsysteme es nun einmal sind, haben so ihre ganz eigenen Wehwehchen. Dr. Linux beobachtet die Patienten in den Linux-Newsgruppen, stellt an dieser Stelle Rezepte für aktuelle Probleme aus und alternative Heilmethoden vor.
  • Dr. Linux
    Auch wenn oft schlicht von "einstampfen", "in die Tonne treten" oder "kopieren nach /dev/null" gesprochen wird, steckt hinter dem Löschen von Daten durchaus mehr als nur ein Mausklick.
  • Shell-Tipps
    Alte (Unix-) Hasen lieben sie, Linux-Ein- und Aufsteiger stehen ihr oft mindestens skeptisch bis ablehnend gegenüber: der Shell. Wie eine Muschelschale legt sie sich um die Perle (den Linux-Kernel) und regelt alle Kommunikation mit ihm. Dieses für viele unbekannte Wesen wollen wir in unserer neuen Reihe näher beleuchten und versuchen, Vorurteile abzubauen, sowie Ihnen einen Einblick in die Möglichkeiten dieser mächtigen Anwenderschnittstelle geben. fortgeschrittenere Shell-User seien an dieser Stelle aufgefordert, ihre Tipps und Tricks an uns zu schicken, so dass wir sie in dieser Serie weiter verbreiten können.
Kommentare

Infos zur Publikation

title_2014_08

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

Mit der Zeitschrift LinuxUser sind Sie als Power-User, Shell-Guru oder Administrator im kleinen Unternehmen monatlich auf dem aktuelle Stand in Sachen Linux und Open Source.

Sie sind sich nicht sicher, ob die Themen Ihnen liegen? Im Probeabo erhalten Sie drei Ausgaben zum reduzierten Preis. Einzelhefte, Abonnements sowie digitale Ausgaben erwerben Sie ganz einfach in unserem Online-Shop.

NEU: DIGITALE AUSGABEN FÜR TABLET & SMARTPHONE

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

Tipp der Woche

Schnell Multi-Boot-Medien mit MultiCD erstellen
Schnell Multi-Boot-Medien mit MultiCD erstellen
Tim Schürmann, 24.06.2014 12:40, 0 Kommentare

Wer mehrere nützliche Live-Systeme auf eine DVD brennen möchte, kommt mit den Startmedienerstellern der Distributionen nicht besonders weit: Diese ...

Aktuelle Fragen

Server antwortet mit falschem Namen
oin notna, 21.07.2014 19:13, 1 Antworten
Hallo liebe Community, Ich habe mit Apache einen Server aufgesetzt. Soweit, so gut. Im Heimnet...
o2 surfstick software für ubuntu?
daniel soltek, 15.07.2014 18:27, 1 Antworten
hallo zusammen, habe mir einen o2 surfstick huawei bestellt und gerade festgestellt, das der nic...
Öhm - wozu Benutzername, wenn man dann hier mit Klarnamen angezeigt wird?
Thomas Kallay, 03.07.2014 20:30, 1 Antworten
Hallo Team von Linux-Community, kleine Zwischenfrage: warum muß man beim Registrieren einen Us...
openSUSE 13.1 - Login-Problem wg. Fehler im Intel-Grafiktreiber?
Thomas Kallay, 03.07.2014 20:26, 8 Antworten
Hallo Linux-Community, habe hier ein sogenanntes Hybrid-Notebook laufen, mit einer Intel-HD460...
Fernwartung für Linux?
Alfred Böllmann, 20.06.2014 15:30, 7 Antworten
Hi liebe Linux-Freunde, bin beim klassischen Probleme googeln auf www.expertiger.de gestoßen, ei...