fish — die benutzerfreundliche Shell mit Autosuggestions
Praxis-Guide zu fish: Variablen, Funktionen, Abbreviations und Universal Variables in der benutzerfreundlichen, nicht-POSIX-kompatiblen Shell.
fish – die Friendly Interactive Shell – setzt auf Komfort statt Konvention: Autosuggestions, Syntax-Highlighting und intelligente Tab-Vervollständigung funktionieren sofort, ganz ohne Konfiguration. Der zentrale Stolperstein ist die eigene, nicht-POSIX-kompatible Syntax – statt export nutzt du set -x, statt &&/|| schreibst du and/or. Dieser Guide zeigt dir Variablen, Funktionen, Abbreviations und die String-Tools, die du im Alltag wirklich brauchst.
Grundlagen
fish — Eine Fish-Shell-Sitzung starten.
fishfish -c '<command>' — Einen Kommando-String ausführen und beenden.
fish -c 'echo Hello World'fish -l — Als Login-Shell starten.
fish -lfish -n <script> — Syntax prüfen, ohne auszuführen (No-Execute-Modus).
fish -n myscript.fishfish_config — Die webbasierte Konfigurationsoberfläche im Browser öffnen.
fish_configfish_config theme choose <name> — Ein Farbschema von der Kommandozeile aus setzen.
fish_config theme choose 'Dracula'fish --version — Die installierte Fish-Version anzeigen.
fish --versionVariablen & Umgebung
set <var> <value> — Eine lokale Variable setzen (nur im aktuellen Scope).
set name 'World'set -x <var> <value> — Eine Variable setzen und exportieren (für Kindprozesse verfügbar).
set -x EDITOR vimset -U <var> <value> — Eine Universal Variable setzen (bleibt über Sitzungen und Neustarts erhalten).
set -U fish_greeting 'Welcome back!'set -e <var> — Eine Variable löschen (unset).
set -e TEMP_VARset -S <var> — Ausführliche Infos zu einer Variable anzeigen (Scope, Export-Status).
set -S PATHset -l <var> <value> — Eine lokale Variable setzen (nur im aktuellen Block).
set -l tmp_file /tmp/output.txtfish_add_path <dir> — Ein Verzeichnis dauerhaft zum PATH hinzufügen (universal).
fish_add_path ~/.local/binAbbreviations & Aliase
abbr -a <name> <expansion> — Eine Abbreviation anlegen (expandiert beim Tippen inline).
abbr -a gco 'git checkout'abbr -a --position command <name> <expansion> — Abbreviation anlegen, die nur in Kommando-Position greift.
abbr -a --position command l 'ls -la'abbr -e <name> — Eine Abbreviation löschen.
abbr -e gcoabbr -l — Alle Abbreviation-Namen auflisten.
abbr -labbr --show — Alle Abbreviations samt ihrer Expansionen anzeigen.
abbr --showalias <name> '<command>' — Einen Funktions-Alias anlegen (Wrapper um eine Funktion).
alias ll 'ls -la'funcsave <name> — Eine Funktion/einen Alias dauerhaft auf die Platte speichern.
funcsave llFunktionen
function <name>; ...; end — Eine Funktion definieren.
function greet; echo "Hello, $argv[1]"; endfunction <name> -a <args>; ...; end — Eine Funktion mit benannten Argumenten definieren.
function greet -a name; echo "Hello, $name"; endfunction <name> -d '<desc>' — Eine Funktion mit Beschreibung definieren.
function serve -d 'Start dev server'; python3 -m http.server; endfunctions <name> — Die Definition einer Funktion anzeigen.
functions greetfunctions -e <name> — Eine Funktion löschen.
functions -e greetfuncsave <name> — Funktion nach ~/.config/fish/functions/
funcsave greetfunctions -n — Alle definierten Funktionsnamen auflisten.
functions -nKontrollfluss
if <condition>; ...; else; ...; end — Bedingte Ausführung.
if test -f config.yaml; echo 'Found'; else; echo 'Missing'; endswitch <value>; case <pattern>; ...; end — Mustervergleich (wie case/switch).
switch $os; case Linux; echo 'Linux'; case Darwin; echo 'Mac'; endfor <var> in <list>; ...; end — Über eine Liste von Werten iterieren.
for f in *.txt; echo $f; endwhile <condition>; ...; end — Schleife, solange eine Bedingung wahr ist.
while test $count -lt 10; set count (math $count + 1); endbegin; ...; end — Kommandos in einem Block gruppieren (für Umleitung oder Scoping).
begin; echo stdout; echo stderr >&2; end 2>/dev/nulland <command> — Kommando nur ausführen, wenn das vorige erfolgreich war.
make build; and make testor <command> — Kommando nur ausführen, wenn das vorige fehlschlug.
test -f .env; or echo '.env not found'Strings & Mathematik
string match '<pattern>' <string> — Strings gegen ein Glob- oder Regex-Muster matchen.
string match '*.txt' readme.txtstring replace '<old>' '<new>' <string> — Erstes Vorkommen in einem String ersetzen.
string replace 'foo' 'bar' 'foobar'string split '<sep>' <string> — Einen String an einem Trennzeichen aufteilen.
string split ',' 'a,b,c'string trim <string> — Führende und nachfolgende Leerzeichen entfernen.
string trim ' hello 'string length <string> — Die Länge eines Strings zurückgeben.
string length 'hello'string sub -s <start> -l <len> <string> — Einen Teilstring extrahieren.
string sub -s 1 -l 5 'Hello World'math '<expression>' — Einen mathematischen Ausdruck auswerten.
math '2 ^ 10'Vervollständigung & History
complete -c <cmd> -s <short> -l <long> -d '<desc>' — Eine Tab-Vervollständigung für ein Kommando hinzufügen.
complete -c myapp -s v -l verbose -d 'Enable verbose output'complete -c <cmd> -a '<args>' — Argument-Vervollständigungen für ein Kommando hinzufügen.
complete -c myapp -a 'start stop restart'history search <term> — Die Kommando-History durchsuchen.
history search githistory delete --exact '<cmd>' — Einen bestimmten Eintrag aus der History löschen.
history delete --exact 'rm -rf /tmp/test'history clear — Die gesamte Kommando-History löschen.
history clearhistory merge — History aus anderen Fish-Sitzungen zusammenführen.
history merge Fazit
fish nimmt dir viel Tipparbeit ab: Autosuggestions, Syntax-Highlighting und Vervollständigungen stehen ohne jede Einrichtung bereit, und mit set -U, funcsave und fish_config baust du dir dauerhaft deine eigene Umgebung. Der wichtigste Stolperstein bleibt die nicht-POSIX-kompatible Syntax: Snippets aus bash/zsh oder von Stack Overflow laufen oft nicht unverändert – export, &&/|| und Command-Substitution musst du auf set -x, and/or und fish-Klammern (…) übersetzen. Für portable Skripte, die überall laufen müssen, bleibt eine #!/bin/sh-Shebang die sichere Wahl; als komfortable interaktive Alltags-Shell spielt fish dagegen seine Stärken voll aus.
Weiterführende Links
- ubuntuusers-Wiki: Fish – deutschsprachige Einführung in Installation und Nutzung der fish-Shell
- fish – offizielle Dokumentation – vollständige Referenz und Tutorial (englisch)