bash

Bash

Die Bash (Bourne-Again SHell) , ist der unter Linux am meisten verwendete Kommandozeileninterpreter. Hier einige Tips und Tricks zu seiner Benutzung und Programmierung.

Benutzung der Bash

Kommandozeileneditor

Nachfolgend die Tastenkürzel im Emacs-Modus (Standard), wie Sie bei mir funktionieren. Es hängt unter anderem von X11, Fenstermanager, Terminal und der Readline-Konfiguration (/etc/inputrc) ab, ob diese tatsächlich wie gewünscht arbeiten.

Cursorsteuerung

TastenkürzelBeschreibung
Strg+b Setzt den Cursor ein Zeichen nach links.
Alt+b Strg+← Setzt den Cursor ein Wort nach links.
Strg+a Pos 1 Setzt den Cursor auf den Anfang der Eingabezeile
Strg+f Setzt den Cursor ein Zeichen nach rechts.
Alt+f Strg+→ Setzt den Cursor ein Wort nach rechts.
Strg+e Ende Setzt den Cursor auf das Ende der Eingabezeile
Strg+d Entf Löscht das Zeichen unter dem Cursor.
Backspace Löscht das Zeichen links des Cursors.

Ausschneiden und Einfügen

TastenkürzelBeschreibung
Alt-Backspace Schneidet den Text ab Wortanfang bis zum Cursor aus.
Strg+u Schneidet den Text ab Zeilenanfang bis zum Cursor aus.
Alt+d Schneidet den Text ab Cursor bis zum Wortende aus.
Strg+k Schneidet den Text ab Cursor bis zum Zeilenende aus.
Strg+w Schneidet den Text ab Leerzeichen bis zum Cursor aus.
Strg+y Fügt den letzten ausgeschnittenen Text ein.
Alt+y Ändert den den zuletzt eingefügten Text in den vorletzten ausgeschnittenen Text

Sonstiges

Tastenkürzel Beschreibung
Strg+_ Nimmt den letzten Editierbefehl zurück (Undo).
Strg+l Löscht den Bildschirm.
Strg+t Vertauscht die letzten zwei eingegebenen Zeichen.

History

Tastenkürzel

Tastenkürzel /etc/inputrc Bescheibung
Strg-P Den letzten Befehl zurückholen. (Standard: Pfeil nach oben)
Pfeil-aufwärts
"\e[A": history-search-backward
Durchsucht die History nach dem Zeilenanfang rückwärts.
Pfeil-abwärts
"\e[B": history-search-forward
Durchsucht die History nach dem Zeilenanfang vorwärts.
Strg-R Durchsucht die History inkrementell.
Strg+. Das letzte Argument des letzten Kommandos wiederholen.
Leerzeichen
$if Bash
  Space: magic-space
$endif 
Magisches Leerzeichen ersetzt History-Makros durch die entsprechenden Werte.

History-Makros

Makros Beschreibung
!:0 letzter verwendeter Befehl
!^, !:2, !:3, …, !$ erstes, zweites, drittes, …, letztes Argument des letzten Befehls
!* Alle Argumente des letzten Befehls
!-2, !-3, ... vorletzte, vorvorletzte, … Kommandozeile
!-2^, !-2:2, !-2$ erstes, zweites, letztes Argument der vorletzten Kommandozeile

Verhalten

Konfiguration Datei Beschreibung
export HISTCONTROL=ignoredups
/etc/bash.bashrc Fügt keine doppelten Zeilen der History hinzu.
shopt -s histappend
/etc/bash.bashrc Hängt Zeilen an die Histroy-Datei an, statt sie zu überschreiben.
PROMPT_COMMAND='history -a'
/etc/bash.bashrc Immer wenn ein Prompt erscheint, wird die vorherige Zeile in die Histroy-Datei geschieben.

Angabe von Verzeichnissen

Makro Beschreibung
~ Heimatverzeichnis
~- vorheriges Verzeichnis

Der Befehl “cd -“ wechselt wie “cd ~-“ ins vorherige Verzeichnis.

Durch Aufnahme der Verzeichnisspfade in die Variable CDPATH kann die Pfadangabe beim cd-Befehl eingespart werden:

~$ CDPATH="/var"
~$ cd spool
/var/spool

Vervollständigung

Tastenkürzel

Tastenkürzel /etc/inputrc Bescheibung
<TAB> Vervollständigt das letzte Argument

Verhalten

Datei Befehl Bescheibung
/etc/inputrc
set match-hidden-files off
Verhindert die Ausgabe von versteckten Dateien bei "~\<TAB>" im Gegensatz zu "~\.<TAB>".
/etc/inputrc
set completion-ignore-case on
Vervollständigt auch bei falscher Großschreibung.

Programmierung der Bash

Schnipsel

Parameterauswertung

parseopt()
# Aufruf:            
#    parseopt <optstr> [ <param1> <...> ]
# Beispiel:          
#    parseopt "ip:" "$@" || help
# Rückgabewert:      
#    0: Erfolgreich 1: Fehler in paramstr
# Rückgabevariablen: 
#    opt<char>: Wert der Option <char> (bei Schaltern "on")
#    optarg[]:  Feld der angegebenen Argumente
#    opt<char> und optarg[] behalten nicht überschriebene Werte bei.
{
  local optstr="$1"; shift
  local argz=0
  OPTIND=1;
  while [[ $OPTIND -le $# ]]
  do
    while getopts  "$optstr" flag
    do
      case "$flag" in [?:] ) return 1;; esac
      [[ -z $OPTARG ]] && OPTARG=on
      eval opt${flag}='"$OPTARG"'
    done
    if [[ $OPTIND -le $# ]]
    then 
      optarg[$((argz++))]="${!OPTIND}"
      OPTIND=$((OPTIND+1))
    fi
  done
  return 0;
}

Links

bash.txt · Zuletzt geändert: 2014/09/13 19:12 (Externe Bearbeitung)

Seiten-Werkzeuge