Fish (Friendly Interactive Shell) ist eine moderne Kommandozeilen-Shell, die seit 2005 von Axel Liljencrantz entwickelt wird. Sie ist bewusst nicht POSIX-kompatibel und legt den Fokus auf Komfort: Syntax-Highlighting, Autosuggestions und Tab-Vervollständigung funktionieren ohne Konfiguration. Das Ziel: eine Shell, die direkt nach dem Start für Einsteiger wie Profis angenehm bedienbar ist.
Erste Schritte
fish # interaktive Sitzung starten
fish_config # Konfiguration im Browser (Web-UI)
fish_add_path ~/bin # Verzeichnis dauerhaft zum PATH hinzufügen
help # Dokumentation im Browser öffnen
Die Konfigurationsdatei liegt unter ~/.config/fish/config.fish und wird beim Start automatisch ausgeführt.
Befehle und Eigenheiten
- Autosuggestions: Fish zeigt während der Eingabe graue Vorschläge an; mit
→oderCtrl-Fwird der Vorschlag übernommen. - Variablen:
set -l(lokal),set -g(global),set -U(universell, über Sitzungen hinweg dauerhaft),set -x(exportiert). Stattexport VAR=wertschreibt manset -gx VAR wert. - Funktionen:
function name ... enddefiniert Funktionen,funcedbearbeitet sie interaktiv,funcsavespeichert sie dauerhaft. - Aliase:
alias ll "ls -l"erzeugt intern eine Funktion;abbrdefiniert Abkürzungen, die erst nach Leertaste expandiert werden. - Events:
emitsendet eigene Events,--on-eventregistriert Handler — damit lassen sich Prompts, cd-Wechsel und Timer steuern. - Completions:
completeergänzt eigene Vervollständigungen für beliebige Kommandos. - Schleifen und Bedingungen:
for x in a b c; echo $x; end,if ...; else; end,while ...; end. - Verlauf:
historyzeigt und durchsucht die Historie;cd -wechselt zum vorherigen Verzeichnis.
Erweiterungen
Fisher ist der verbreitete Plugin-Manager für Fish (fisher install plugin). Viele Konfigurations-Frameworks wie Oh My Fish sind inzwischen weniger aktiv, weil Fish viele Features bereits eingebaut mitbringt.
Verwandte Grundlagen: Zsh-Befehle, Xonsh-Befehle und die klassische Bash.
Zsh (Z Shell) ist eine leistungsfähige, interaktive Kommandozeilen-Shell, die 1990 von Paul Falstad an der Princeton University entwickelt wurde. Sie ist weitgehend bash-kompatibel, bietet aber deutlich mehr Funktionen: erweiterte Globbing-Muster, ein modulares Completion-System, ausgefeilte Prompt-Expansion und ein Plugin-Ökosystem. Seit macOS Catalina (2019) ist Zsh die Standard-Shell auf dem Mac.
Erste Schritte
zsh # interaktive Sitzung starten
echo $ZSH_VERSION # Version anzeigen
which zsh # Pfad der Shell ermitteln
Die Konfiguration liegt typischerweise in ~/.zshrc (interaktive Shells); dazu kommen .zshenv (für alle Sitzungen), .zprofile und .zlogin (Login-Shells) sowie .zlogout (beim Beenden).
Besondere Befehle
autoload: lädt Funktionen bei Bedarf aus demFPATH— Grundlage des modularen Zsh-Funktionssystems.zcompile: kompiliert Skripte und Funktionen in schneller ladbare.zwc-Dateien.compinit/compdef: starten das Completion-System und definieren eigene Vervollständigungen;compinstallführt durch die Einrichtung.zmv: massenhaftes Umbenennen per Muster, z. B.zmv '(*).txt' '$1.md'.zcalc: ein integrierter wissenschaftlicher Taschenrechner.vcs_info: liefert Versionskontroll-Informationen (Git, SVN, …) für den Prompt.setopt/unsetopt: schalten über 100 Optionen ein und aus, z. B.setopt autocd(Wechsel ins Verzeichnis ohnecd) oderhistignorespace.bindkey: belegt Tastenkombinationen im Zsh-Line-Editor (z. B.bindkey '^r' history-incremental-search-backward).- Erweiterte Parameter-Expansion:
${(L)var}(Kleinbuchstaben),${var:h}(Head/Pfad ohne Dateiname),${(j:,:)arr}(Array verbinden).
Erweiterungen
Oh My Zsh ist das populärste Framework mit über 300 Plugins und vielen Themes (plugins=(git docker kubectl npm)). Daneben gibt es Prezto, zplug, zgen und antigen. Ergänzend sind zsh-autosuggestions (fish-artige Vorschläge) und zsh-syntax-highlighting (farblich hervorgehobene Kommandos) weit verbreitet. Bekannte Prompt-Themes sind powerlevel10k und agnoster.
Verwandte Grundlagen: Fish-Befehle, Xonsh-Befehle und die klassische Bash.
Xonsh (ausgesprochen wie „conch") ist eine vollwertige, plattformübergreifende Shell, deren Sprache eine Erweiterung von Python 3 ist. Shell-Befehle wie ls oder git status lassen sich direkt mit Python-Ausdrücken mischen — Variablen sind echte Python-Objekte, und die Umgebung ist ein Dictionary. Xonsh läuft auf Linux, macOS, Windows, Android und sogar im Jupyter-Notebook.
Erste Schritte
python -m pip install xonsh # Installation
xonsh # interaktive Sitzung starten
xonsh --rc # mit Konfiguration (auch --login)
Die Startkonfiguration liegt in ~/.xonshrc und wird beim Start als Python-Code ausgeführt.
Sprache und Befehle
- Python + Shell gemischt:
for x in range(3): print(x)funktioniert direkt; genausols -lals Subprozess-Befehl. - Umgebung als Dictionary:
$HOMEist ein Python-Objekt,env['PATH']oder$PATHdirekt veränderbar. - Interpolation:
echo @(1+1)wertet Python aus und übergibt das Ergebnis an den Befehl;$()fängt Subprozess-Ausgabe als String,![]führt einen reinen Python-Befehl ohne Subprozess aus. - Aliase:
aliases['ll'] = 'ls -l'oder als Python-Funktionen, die echte Objekte übergeben. - Events statt Hooks:
@events.on_chdir,@events.on_precommandund weitere Events ersetzen die Hook-Systeme anderer Shells. xpip: ein Wrapper, der Python-Pakete in der richtigen Umgebung installiert (xpip install requests).xontrib: Erweiterungen („contributions") wiexontrib-autojump,xontrib-prompt-baroderxontrib-jupyter— aktiviert perxontrib load <name>.- History:
historyzeigt die Sitzungshistorie; zusätzlich gibt es Vorschläge (Suggestions) wie in Fish. - Fremde Umgebungen:
foreign_envundsuperenvladen Umgebungen anderer Shells oder Konfigurationen nach.
Einsatzgebiet
Xonsh eignet sich besonders für Anwender, die ohnehin in Python denken: Datenverarbeitung, Globbing mit echten Python-Listen, komplexe Skripte ohne erneutes Erlernen einer Shell-Syntax. Nachteil: kein POSIX-kompatibles Skripting — reine Shell-Skripte bleiben in Bash oder Zsh.
Verwandte Grundlagen: Fish-Befehle, Zsh-Befehle und Python-Befehle.
Racket ist ein moderner Lisp-Dialekt, der aus der Scheme-Tradition stammt und sich auf das Bauen von Sprachen spezialisiert hat — bekannt als language-oriented programming. Die DrRacket-IDE und das mächtige Makrosystem machen Racket besonders für Ausbildung und Sprachdesign beliebt.
Erste Schritte
Racket-Programme beginnen mit einem Sprach-Header; die Ausführung übernimmt racket:
#lang racket ; erste Zeile jeder Datei
racket datei.rkt ; Programm ausführen
racket -i -e "(+ 1 2)" ; Ausdruck in REPL auswerten
raco: Die Kommandozeilen-Werkzeuge
raco make datei.rkt— kompiliert zu Bytecode.raco pkg install paket— Paket installieren (Paketmanager).raco pkg remove paket— Paket entfernen.raco test— Tests aus dem Paket ausführen.raco docs— lokale Dokumentation im Browser öffnen.raco exe --gui datei.rkt— eigenständige ausführbare Datei bauen.
Sprachvariationen und Makros
#lang typed/racket ; Typed Racket: statische Typen
#lang scribble ; Dokumentationssprache
(define-syntax-rule (swap a b) ...) ; eigenes Makro
Praxis-Tipps
- DrRacket bietet Schritt-für-Schritt-Debugging und einen Stepper für Anfänger.
- Mit
#langlassen sich eigene DSLs definieren — Racket kompiliert dann die neue Sprache. - Für Web-Anwendungen existiert das Web-Server-Paket im Racket-Ökosystem.
Verwandte Grundlagen: Scheme-Befehle, Common-Lisp-Befehle, Emacs-Lisp-Befehle.
Emacs Lisp (kurz Elisp) ist der Lisp-Dialekt des Editors GNU Emacs und die Sprache, in der nahezu die gesamte Editor-Logik geschrieben ist. Wer Emacs erweitert oder konfiguriert, schreibt Elisp — die init.el ist ein Elisp-Programm.
Erste Schritte
Elisp wird interaktiv im Editor ausgewertet:
M-x eval-buffer ; ganze Datei auswerten
M-x eval-defun ; aktuelle Definition auswerten
M-x emacs-lisp-byte-compile-file ; in .elc kompilieren
In der Kommandozeile lässt sich Emacs auch skriptartig nutzen:
emacs --batch -l datei.el -f Funktion ; ohne GUI ausführen
emacs -Q --batch --eval "(message "Hallo")" ; Optionen deaktivieren und Ausdruck auswerten
Paketverwaltung
- package.el ist der eingebaute Paketmanager:
M-x package-install,M-x list-packages. - use-package deklariert Pakete deklarativ in der init.el und verzögert das Laden.
- straight.el installiert Pakete reproduzierbar direkt aus Git-Repositories.
Wichtige Sprachkonstrukte
(defun gruss (name) (message "Hallo %s" name)) ; Funktion
(setq mein-var 42) ; Variable setzen
(add-hook 'text-mode-hook 'meine-funktion) ; Hook registrieren
(if (boundp 'var) var nil) ; Bedingung
Praxis-Tipps
- Mit
C-h f(describe-function) findet man jede Elisp-Funktion mit Doku. - Byte-Compilation (
.elc) beschleunigt das Laden großer Konfigurationen. - Elisp verwendet dynamische Bindung — Variablen in der Konfiguration sind global sichtbar.
Verwandte Grundlagen: Common-Lisp-Befehle, Racket-Befehle, Scheme-Befehle.