linux-cli-shell shell fish productivity minimalism modern

Fish: Friendly Interactive Shell (Artikel 243)

Der Einstieg in die Fish Shell. Erfahren Sie alles über das 'Batteries Included' Prinzip, die moderne Syntax und warum Fish die ideale Shell für Einsteiger und Effizienz-Fans ist.

# Fish Shell: Modernes Arbeiten ohne Konfigurations-Albtraum

TL;DR / Management Summary Fish (Friendly Interactive Shell) bricht mit der Tradition der kryptischen Unix-Shells. Während Zsh (Artikel 242) erst durch Plugins mächtig wird, liefert Fish alles out-of-the-box: Syntax-Highlighting, Autosuggestions und ein webbasiertes Konfigurations-Interface. Der wichtigste Punkt für Admins: Fish ist nicht POSIX-kompatibel. Das bedeutet, Bash-Skripte laufen nicht nativ in Fish – ein bewusster Schritt hin zu einer saubereren, moderneren Skriptsprache.


# 1. Einführung & Architektur

Batteries Included.

Fish wurde entwickelt, um dem User von der ersten Sekunde an zu helfen. Es gibt keine .bashrc oder .zshrc, die man stundenlang editieren muss.

# Das Design-Konzept (Mermaid)

graph TD
    A[User Type: 'git '] --> B[Fish: Integrated Autosuggestion]
    B --> C[Show: 'commit -m' in gray]
    A --> D[Fish: Web-based Config]
    D --> E[http://localhost:8000]
    A --> F[Modern Syntax: No more 'then' or 'do']
    F --> G[Clean Scripts]

# 2. Warum Fish anders ist

Die Vorteile der neuen Welt.

# 1. Autosuggestions

Fish lernt aus Ihrer Historie und schlägt den wahrscheinlichsten Befehl in hellem Grau vor. Ein Klick auf die Pfeiltaste rechts übernimmt den Vorschlag.

# 2. Web-Konfiguration

Anstatt Textdateien zu wühlen:

fish_config
# Öffnet einen Browser zur Auswahl von Themes und Aliasen

# 3. Syntax-Vereinfachung

Kein then, kein do, kein fi.

# Fish Syntax
if test -f myfile
    echo "Found it"
end

# 3. Die Hürde: POSIX-Inkompatibilität

Was man wissen muss.

Da Fish eine eigene Syntax nutzt, funktionieren klassische Bash-Einzeiler oft nicht:

  • Bash: export PATH=$PATH:/opt/bin
  • Fish: set -Ua fish_user_paths /opt/bin

Wichtig: Setzen Sie Fish niemals als System-Shell für /bin/sh ein. Viele System-Skripte würden sofort brechen. Nutzen Sie Fish als Ihre persönliche Login-Shell.


# 4. Day-2 Operations: Universal Variables

Synchronisation über Terminals hinweg.

Fish hat ein geniales Feature namens Universal Variables (set -U).

  • Wenn Sie eine Universal-Variable in einem Terminal setzen, ist sie sofort in allen anderen offenen und zukünftigen Fish-Terminals verfügbar. Kein manuelles source ~/.fishrc mehr nötig.

# 5. Troubleshooting & “War Stories”

Wenn die Moderne auf Tradition trifft.

# Story 1: “Der hängende Python-Venv”

Symptom: source venv/bin/activate schlägt in Fish fehl. Ursache: Das activate Skript ist in Bash geschrieben. Fish versteht es nicht. Lösung: Python (und viele andere Tools) liefern spezialisierte Skripte mit. Nutzen Sie: source venv/bin/activate.fish.

# Story 2: “Subshell Frust”

Symptom: Ein komplexer Befehl mit Backticks (`command`) funktioniert nicht. Ursache: Fish nutzt keine Backticks mehr für Command-Substitution. Lösung: Nutzen Sie die Klammer-Syntax: (command).

# Fish Style
count (ls *.txt)

# 6. Fazit & Empfehlung

  • Wahl: Nutzen Sie Fish, wenn Sie keine Lust auf das “Basteln” an der zshrc haben.
  • Productivity: Die integrierte Suche in der Historie (einfach Tippen und Pfeil hoch) ist die beste aller Shells.
  • Wichtig: Installieren Sie Fisher, den minimalen Plugin-Manager für Fish, falls Sie doch einmal ein spezielles Plugin (z.B. nvm Support) brauchen.

# Anhang: Cheatsheet

Aufgabe Fish Befehl
Variable setzen (Session) set VAR value
Variable setzen (Universal) set -U VAR value
Pfad dauerhaft erweitern fish_add_path /opt/bin
Aliase erstellen alias ll='ls -lh'
Funktion definieren funced my_func
Konfiguration öffnen fish_config
Letzter Befehl Status $status (statt $?)
Plugin Manager Fisher