cli.help – Update: Bash Builtins Teil 1/5
10 neue Tools haben sich zu unserer Linux-Hilfe gesellt, zum Beispiel bg, alias und command
cli.help ist unser hauseigenes Linux-Hilfe-Projekt für das Command Line Interface (CLI), also den guten alten Terminal. Die GNU Core Utilities haben wir bereits komplett dokumentiert, dazu Git, Docker und das Thema Nutzerverwaltung. Jetzt folgen Stück für Stück die Bash-internen Funktionen, insgesamt rund 50 Stück.
Bash Builtins
Neben den GNU Core Utilities liefern vor allem die Bash-eigenen Funktionen die wichtigsten Werkzeuge für die allermeisten Linux-Nutzer. Zu den bekannteren Befehlen gehören etwa alias, cd, echo, exec, jobs, kill, pwd und source. Dem Alphabet ist es geschuldet, dass bislang folgende Tools fertig sind:
- alias
- bg
- bind
- break
- builtin
- cd
- command
- compgen
- complete
- compopt
- Extra: autocompletion
Die letzten drei Befehle behandeln das Thema Auto Completion, also die Vervollständigung zum Beispiel von Befehlen mit Optionen per TAB-Taste. Allein machen die Tools wenig Sinn, daher findet Ihr die wichtigsten Infos dazu zusammengefasst in autocompletion. Aufrufen könnte Ihr die Seiten wie gewohnt per
curl cli.help/alias
curl cli.help/autocompletion
und so weiter.
Inhalte
Hier die Inhalte der einzelnen Dateien, in guter alter MAD-Manier lieblos zusammengestellt.
alias
Alle Aliasse anzeigen:
alias
ll temporär als Alias für "ls -al" setzen:
alias ll='ls -al'
Alias dauerhaft in ~/.bashrc eintragen:
alias ll='ls -al'
bind
An Tastenkürzel anbindbare (Editing-)FUNKTIONEN (-P) samt Kürzeln (soweit angebunden) anzeigen:
bind -P
An Tastenkürzel angebundene SHELL-KOMMANDOS (-X) anzeigen:
bind -X
An Tastenkürzel angebundene MAKROS (-S) anzeigen:
bind -X
Tastenkürzel STRG-K (\C-k) für das KOMMANDO (-x) xeyes anlegen:
bind -x '"\C-k":xeyes'
Für die folgenden Beispiele nützlich: Keycode für F7 anzeigen:
STRG-V F7
MAKRO-Text "Hello World" an Taste F7 (Keycode: [20~ und \e als Escape-Zeichen) binden:
bind '"\e[20~":"Hello World"'
FUNKTION undo an F7 binden:
bind '"\e[20~":undo'
Keymap von vi statt des emacs-Standards nutzen:
bind -m vi
Binding für STRG-K löschen:
bind -r "\C-k"
Alle Bindings für Funktion undo löschen:
bind -u undo
break
While-Schleife unterbrechen:
while true; do echo Hallo Welt; break; done
Zwei verschachtelte While-Schleifen unterbrechen:
while true; do echo eins; while true; do echo zwei; break 2; done; done
builtin
Bash-eigenen echo-Befehl nutzen, obwohl weiterer echo-Befehl existiert:
builtin echo Hallo
Beispiel: Standard-echo nutzen, obwohl echo als Alias für "echo -e" gesetzt ist:
alias echo='echo -e'
echo "Hallo\nWelt"
Ausgabe:
Hallo
Welt
builtin echo "Hallo\nWelt"
Ausgabe:
Hallo\nWelt
cd
Ins Home-Verzeichnis des Nutzers wechseln 1:
cd
Ins Home-Verzeichnis des Nutzers wechseln 2:
cd ~
In übergeordnetes Verzeichnis wechseln:
cd ..
Ins Verzeichnis "test" zwei Ebenen weiter oben wechseln:
cd ../../test
In Quelle (/etc) eines verknüpften Verzeichnisses (~/etc-shortcut) wechseln:
cd -P ~/etc-shortcut
command
Informationen über einen Befehl/ein Programm oder eine Bash-interne Funktion anzeigen, hier foobar:
command V foobar
Befehl aus dem Standard-PATH nutzen, auch wenn eventuell ein anderes Programm für denselben Aufruf definiert ist:
command -p xeyes
Bash-eigenen echo-Befehl nutzen, obwohl weiterer echo-Befehl existiert:
command echo Hallo
Beispiel: Standard-echo nutzen, obwohl echo als Alias für "echo -e" gesetzt ist:
alias echo='echo -e'
command -V echo
Ausgabe:
echo ist ein Alias von `echo -e'.
echo "Hallo\nWelt"
Ausgabe:
Hallo
Welt
command echo "Hallo\nWelt"
Ausgabe:
Hallo\nWelt
Auto Completion
Elemente aus "foo fuu option3 option3" ausgeben, die mit f beginnen:
compgen -W 'foo fuu option3 option3' -- f
Die Eingabe "./meinskript [TAB][TAB]" per Autovervollständigung mit Verzeichnisnamen im aktuellen Verzeichnis erweitern:
complete -o dirnames ./meinskript
Die Option "dirnames" aus obigem Beispiel wieder entfernen:
compopt +o dirnames ./meinskript
Simpelst mögliches Beispiel: Autovervollständigung der Eingabe "foobar [TAB][TAB]" mit den Optionen zunge, hand oder bein. Bei der Eingabe "foobar b [TAB][TAB]" wird nur die Option bein angeboten und so weiter. Skript unter "/etc/bash_completion.d/IRGENDEINNAME" erstellen, anschließend ausführen:
_foobarcompletion()
{
local getippte_buchstaben
getippte_buchstaben="${COMP_WORDS[COMP_CWORD]}"
COMPREPLY=( $(compgen -W "zunge hand bein" -- ${getippte_buchstaben}) )
}
complete -F _foobarcompletion foobar
Weitere Artikel zum Thema CLI/Terminal.