In diesem Artikel
- Was fish gegenüber dem Terminal verändert
- Erst ausprobieren, dann zur Login-Shell machen
- Vorschläge und Tab-Vervollständigung nutzen
- Alias und Abkürzung auseinanderhalten
- Die eigene config.fish klein halten
- Variablen und vorhandene Skripte verstehen
- Aufräumen und typische Fehler finden
- Chronik, Datenschutz und Quellen
fish macht den Einstieg in die Kommandozeile angenehm: Die Shell bietet Vorschläge aus früheren Befehlen und vervollständigt viele Optionen. Auf Cthulhu ist fish in meiner NixOS-Datei aktiviert und als Shell für nebu eingetragen. Auch mein Fastfetch-Screenshot zeigt diese Kombination.
Im Repository liegt dafür die NixOS-Systemkonfiguration, aber keine eigene veröffentlichte config.fish. Die Beispiele dieses Artikels sind deshalb neu erstellte Übungen. Du kannst sie nachvollziehen, ohne eine angebliche persönliche Shell-Datei übernehmen zu müssen.
Was fish gegenüber dem Terminal verändert
Kitty oder ein anderes Terminal stellt das Fenster bereit. fish interpretiert darin Befehle, erweitert Variablen und startet Programme. Ein Terminal-Theme ist entsprechend eine andere Einstellung als eine fish-Funktion oder ein Prompt.
fish hat eine eigene Syntax und ist nicht vollständig mit Bash oder einer POSIX-Shell austauschbar. Ein vorhandenes Skript mit #!/bin/bash wird weiterhin durch Bash ausgeführt. Kopierst du einzelne Bash-Zeilen direkt in fish, können andere Regeln gelten. Insbesondere mehrzeilige Kontrollstrukturen und Variablenzuweisungen verdienen einen zweiten Blick.
Prüfe, ob fish installiert ist:
fish --version
Erst ausprobieren, dann zur Login-Shell machen
Zum Test reicht eine zusätzliche Shell:
fish
Mit exit kehrst du zur vorherigen Shell zurück. Du musst für die Übungen keine Login-Shell ändern. Eine einzelne Testsession ist leichter einzuordnen als zugleich Terminal, Prompt und Anmeldekonfiguration umzubauen.
Meine NixOS-Datei enthält folgenden Bezug:
programs.fish.enable = true;
users.users.nebu.shell = pkgs.fish;
Das ist ein Ausschnitt innerhalb des NixOS-Moduls, keine vollständige Datei. Auf anderen Distributionen erfolgt die dauerhafte Shell-Auswahl über deren Benutzerverwaltung. Unter NixOS solltest du eine deklarativ verwaltete Shell über die Konfiguration ändern; der NixOS-Einstieg erklärt den Aufbau.
Vorschläge und Tab-Vervollständigung nutzen
Führe in der fish-Testsession einen harmlosen Befehl aus:
ls -lah
Tippe danach erneut den Anfang. Ein blasser Vorschlag kann aus der Chronik erscheinen; mit der rechten Pfeiltaste übernimmst du ihn, Enter führt ihn aus. Der Vorschlag allein startet noch kein Programm. Mit Tab kannst du verfügbare Dateien, Programme und unterstützte Optionen vervollständigen.
Dass ein vorgeschlagener Befehl früher funktioniert hat, macht ihn nicht automatisch heute passend. Ein anderer Arbeitsordner oder veränderter Dateiname kann die Wirkung ändern. Lies die vervollständigte Zeile vor Enter vollständig, besonders bei Schreib- oder Löschbefehlen.
Alias und Abkürzung auseinanderhalten
Ein Alias ist in fish eine bequem angelegte Funktion. Verwende für die Übung einen neuen Namen, der keine Standardfunktion ersetzt:
alias lltutorial 'ls -lah'
Probiere ihn aus:
lltutorial
Die Funktion nimmt zusätzliche Argumente entgegen. Du kannst ihre Definition ansehen:
functions lltutorial
Eine Abkürzung arbeitet anders: Sie erweitert den Text beim Tippen. Richte eine Übungsabkürzung ein:
abbr --add gsttutorial 'git status --short'
Tippe gsttutorial und ein Leerzeichen. In der Eingabezeile sollte git status --short stehen. Damit bleibt sichtbar, welcher Befehl später ausgeführt wird. Außerhalb eines Git-Verzeichnisses meldet dieser Befehl erwartbar, dass dort kein Repository liegt.
Die eigene config.fish klein halten
fish liest üblicherweise ~/.config/fish/config.fish; ein anderes XDG_CONFIG_HOME verändert den Pfad. Erstelle beziehungsweise bearbeite diese Datei erst, nachdem du eine vorhandene Version gesichert hast. Für den Beginn reicht dieser eigene Ausschnitt:
if status is-interactive
abbr --add gsttutorial 'git status --short'
end
Der Test status is-interactive begrenzt die Einstellung auf interaktive Sessions. So landet zusätzliche Terminalausgabe nicht ungefragt in einer automatisch gestarteten Shell. Funktionen lassen sich mit funcsave in eigenen Dateien dauerhaft ablegen; prüfe vorher den Namen, weil dabei eine vorhandene Funktionsdatei ersetzt werden kann.
Für unseren Alias wäre das:
funcsave lltutorial
Dieser Schritt ist optional und schreibt eine lokale Funktionsdatei. Eine neu geöffnete fish-Sitzung kann die Funktion anschließend automatisch laden. Halte eigene kleine Funktionen getrennt, damit du später ihre Herkunft leichter erkennst.
Variablen und vorhandene Skripte verstehen
Eine Variable setzt du in fish mit set, etwa in einer Übungsfunktion oder Session:
set -l tutorial_message 'Hallo aus fish'
Gib den Wert aus:
echo $tutorial_message
-l bedeutet lokal zum aktuellen Gültigkeitsbereich; es erzeugt keine dauerhafte universelle Einstellung. Für Umgebungsvariablen an gestartete Programme wird zusätzlich Export benötigt. Übernimm export NAME=... aus einem Bash-Tutorial nicht als allgemeines Modell für jede fish-Konfiguration; die dokumentierte fish-Schreibweise und der gewünschte Gültigkeitsbereich sind entscheidend.
Ein unverändertes Bash-Skript startest du bei Bedarf ausdrücklich mit Bash. Den Interpreter eines fremden Skripts auf fish umzuschreiben ersetzt keine Portierung. Die Shebang-Zeile dokumentiert eine echte Abhängigkeit.
Aufräumen und typische Fehler finden
Entferne die Abkürzung aus der laufenden Sitzung:
abbr --erase gsttutorial
Entferne die Funktion aus dem Speicher:
functions --erase lltutorial
Falls du funcsave benutzt hast, entferne zusätzlich die dafür erstellte Datei lltutorial.fish im fish-Funktionsverzeichnis und den Übungseintrag aus config.fish. Sonst kann eine spätere Sitzung die Einstellung wieder laden. Sichere beim Bearbeiten deine übrigen Funktionen.
Bei einer fehlerhaften Konfigurationsdatei hilft eine reine Syntaxprüfung:
fish --no-execute ~/.config/fish/config.fish
Sie führt die Datei nicht aus. Eine erfolgreiche Prüfung belegt Syntax, nicht die Verfügbarkeit aller Programme oder die richtige Wirkung jeder Funktion.
Chronik, Datenschutz und Quellen
Die Chronik kann persönliche Pfade und Befehle enthalten. Nutze für Kennwörter die interaktive Eingabe des jeweiligen Programms statt Klartext in der Befehlszeile. Prüfe auch Konfigurationsdateien vor dem Veröffentlichen auf Tokens und interne Hostnamen.
- Meine geprüfte NixOS-Datei: fish-Aktivierung und Benutzershell.
- Offizielles fish-Tutorial.
- Abkürzungen in fish.
- Funktionen speichern und set.
Referenzen geprüft am 8. Oktober 2026. Die Übungsnamen sind absichtlich von deinen normalen Kurzbefehlen getrennt.