Fish - die benutzerfreundliche interaktive Shell
(github.com/fish-shell)- fish ist eine benutzerfreundliche Kommandozeilen-Shell für macOS, Linux und verwandte Systeme und bietet ohne zusätzliche Konfiguration Syntaxhervorhebung, automatische Vorschläge während der Eingabe und Tab-Vervollständigung
- Sie verhält sich im Großen und Ganzen ähnlich wie andere Shells wie bash oder zsh, die wichtigsten Unterschiede, nach denen man unter „unlike other shells“ suchen kann, sind jedoch im offiziellen Tutorial zusammengefasst
- Die Installationswege unterscheiden sich je nach Plattform; unter macOS werden Homebrew, MacPorts, das Installationsprogramm von fishshell.com und eine eigenständige App unterstützt
- Die mindestens unterstützte macOS-Version ist 10.12
- Pakete für Debian, Fedora, openSUSE und Red Hat Enterprise Linux/CentOS unter Linux werden über den openSUSE Build Service bereitgestellt
- Ubuntu-Pakete können über die fish-PPA installiert werden
- Unter Windows 10/11 ist die Installation über die Linux-Distributionsverfahren von WSL oder durch Bauen aus dem Quellcode möglich; auf allen Windows-Versionen werden außerdem Installationen über Cygwin oder MSYS2 unterstützt
- Nach der Installation beginnt die Nutzung, indem im aktuellen Shell-Kontext
fishausgeführt wird; Benutzerdokumentation ist über denhelp-Befehl innerhalb von fish und in der offiziellen Dokumentation verfügbar - Für die Ausführung werden grundlegende POSIX-Dienstprogramme und übliche *nix-Systemwerkzeuge wie
mktempbenötigt; einige optionale Funktionen erfordern zusätzliche Tools- Für die Generierung von Autovervollständigungen auf Basis von Handbuchseiten und das webbasierte Konfigurationstool
fish_configwird Python 3.5+ benötigt - Für die Integration mit der Systemzwischenablage wird eines von
xsel,xclip,wl-copy/wl-pasteoderpbcopy/pbpastebenötigt - Für die vollständige Vervollständigung von
yarnundnpmwird das NPM-Modulall-the-package-namesbenötigt
- Für die Generierung von Autovervollständigungen auf Basis von Handbuchseiten und das webbasierte Konfigurationstool
- Für das Bauen aus dem Quellcode werden Rust 1.85 oder höher, CMake 3.15 oder höher und ein C-Compiler benötigt; PCRE2 und gettext sind optionale Abhängigkeiten
- Sowohl CMake-Builds als auch Cargo-Builds werden unterstützt; beim Cargo-Build wird das eigenständige Binärprogramm in
~/.cargo/bin/abgelegt, während eine vollständige CMake-Installation Manpages an den Standardpfaden, eine lokale Kopie der HTML-Dokumentation sowie zusätzliche Optionen für Funktions-, Vervollständigungs- und Konfigurationsverzeichnisse bereitstellt
2 Kommentare
Ich nutze gerade zsh, aber wenn sich das nächste Mal die Gelegenheit ergibt, sollte ich fish auch mal ausprobieren.
Meinungen auf Hacker News
Der größte Vorteil von fish ist, dass kaum Einrichtung nötig ist. Ich bin 41, habe eine Familie und überhaupt keine Geduld, Zeit mit Tool-Konfiguration zu verschwenden; zsh fühlte sich jedes Mal wie ein Hindernis an, wenn ich es brauchbar machen wollte.
Diverse zsh-Skripte wirken auch nicht gerade robust, und wenn man die Shell häufig nutzt, stößt man irgendwann auf Randfälle, die in einem Bündel von Userscripts, deren Ursprung meist Copy & Paste ist, nicht behandelt wurden.
Meine fish-Dotfiles liegen unter https://github.com/mattgreen/dotfiles/tree/master/fish und enthalten nur etwa ein Submodul-basiertes Plugin-System, einen asynchronen Git-Prompt, Aliasse und ein paar Umgebungsvariablen.
Da fish schon fast alles mitbringt, ist keine Wartung nötig; das Einzige, was ich mir noch wünsche, ist, dass der asynchrone Prompt zu einem First-Class-Feature wird, weil das wegen des State-Trackings besser die Shell übernehmen sollte als User-Code.
Noch nerviger war, dass, wenn sie um Hilfe baten, keiner der Befehle, die ich ihnen nannte, in fish funktionierte, wodurch die Fehlersuche sehr langsam wurde.
Der Rest meiner zsh-Konfiguration besteht größtenteils aus einem Prompt-Utility und Dingen, die ich über die Jahre hinzugefügt habe; Plugins nutze und brauche ich nicht. Falls ich sie gebraucht hätte: zplug, das ich früher ausprobiert habe, war wirklich einfach einzurichten und zu verwenden.
[1]: https://github.com/mid-kid/config/blob/master/shell/.zshrc#L...
/bin/sh-kompatiblen Skripte schreiben müsste, wäre ich aus ähnlichen Gründen zu Fish gewechselt.Aus Sicht der User Experience ist es anderen Shells haushoch überlegen, und es ist erstaunlich, dass es auf Betriebssystemen wie dem Mac nicht als Standard übernommen wurde. Mit Fish kann man Familienmitgliedern Terminal-Aufgaben erklären, ohne dass jemand genervt aufgibt; bei anderen Shells kann man das kaum behaupten.
Vor ein paar Jahren hat es etwa eine Stunde gedauert, die gewünschten Plugins auszuwählen und das Repo zu erstellen; inzwischen ist eine neue Maschine in 5–10 Minuten bereit.
Ich nutze Fish seit über zehn Jahren als Login-Shell und, anders als viele andere, auch fürs Scripting. Für einfache Aufgaben gibt es weniger Fallstricke als bei bash, daher ist das Schreiben von Skripten deutlich angenehmer.
Wenn ich Online-Anleitungen lese, ist es trivial, bash-Beispiele nach fish zu übertragen. Ich verstehe nicht, warum das als Problem dargestellt wird, und hatte damit tatsächlich noch nie Schwierigkeiten.
set -ein bash. Ich weiß, dass es schwierig ist, das in allen Fällen, etwa auch mit pipefail, korrekt funktionieren zu lassen, aber ohne diese Funktion möchte ich viele Skripte nicht schreiben.Ich habe fish etwa fünf Jahre lang genutzt und möchte jetzt nicht mehr zurück. Selbst ohne irgendeine Zusatzfunktion zu installieren, erledigt es im Auslieferungszustand alles, was meine frühere zsh-Konfiguration mit Paketmanager und Plugins gemacht hat.
Das Einzige, was ich geändert habe, war spacefish; inzwischen habe ich nur noch starship.rs hinzugefügt.
zist ebenfalls einen Versuch wert. Und ich kann meine aktuelle Konfiguration gerade nicht sehen, aber es gibt ein Plugin, das einen benachrichtigt, wenn ein lange laufender Hintergrundbefehl fertig ist; das ist ziemlich nützlich.Da es lange her ist, habe ich die relevanten Threads zusammengetragen. Gibt es noch mehr?
What's Happening with Fish Releases? - https://news.ycombinator.com/item?id=36875727 - Juli 2023
My shell setup with Fish and Tmux (2021) - https://news.ycombinator.com/item?id=35672358 - April 2023
Ask HN: Are alternative (oil, nu, etc.) shells usable as daily drivers? - https://news.ycombinator.com/item?id=34722208 - Februar 2023
Rewrite it in Rust - https://news.ycombinator.com/item?id=34588340 - Januar 2023
Fish 3.6.0 - https://news.ycombinator.com/item?id=34298157 - Januar 2023
Fish Shell 3.5.0 - https://news.ycombinator.com/item?id=31768405 - Juni 2022
Fish 3.4.0 - https://news.ycombinator.com/item?id=30734072 - März 2022
Fish 3.4.0 Released - https://news.ycombinator.com/item?id=30660587 - März 2022
Ask HN: Oil or Fish Shell? - https://news.ycombinator.com/item?id=30154652 - Januar 2022
The fish shell is amazing - https://news.ycombinator.com/item?id=29341390 - November 2021
Nsh: A fish/bash-like Posix shell in Rust - https://news.ycombinator.com/item?id=28967257 - Oktober 2021
Fish Shell 3.3 - https://news.ycombinator.com/item?id=27663637 - Juni 2021
Fish shell - https://news.ycombinator.com/item?id=27180420 - Mai 2021
Fish Shell 3.2 - https://news.ycombinator.com/item?id=26302678 - März 2021
Fish is not operational on a VT220 terminal (2015) - https://news.ycombinator.com/item?id=25526237 - Dezember 2020
New Features in the Fish Shell - https://news.ycombinator.com/item?id=24631138 - September 2020
Dolphins learn from their peers to use empty shells to catch fish - https://news.ycombinator.com/item?id=23660910 - Juni 2020
Fish Shell 3.1.0 - https://news.ycombinator.com/item?id=22314671 - Februar 2020
Fish: A command line shell for the 90s - https://news.ycombinator.com/item?id=21361696 - Oktober 2019
Show HN: Fisher 3.0 – the package manager for the fish-shell - https://news.ycombinator.com/item?id=18920972 - Januar 2019
Fish shell 3.0 - https://news.ycombinator.com/item?id=18776765 - Dezember 2018
Fish: A user-friendly command line shell for macOS, Linux, etc - https://news.ycombinator.com/item?id=15910897 - Dezember 2017
Fish (Shell) for a Week - https://news.ycombinator.com/item?id=14422672 - Mai 2017
Why I'm Hooked on Fish Shell (and How to Set It Up Right) - https://news.ycombinator.com/item?id=14417046 - Mai 2017
The fish shell is awesome - https://news.ycombinator.com/item?id=14179081 - April 2017
Fish Shell Design Principles - https://news.ycombinator.com/item?id=11102941 - Februar 2016
Fish shell 2.2 - https://news.ycombinator.com/item?id=9873090 - Juli 2015
Fish shell - https://news.ycombinator.com/item?id=9566441 - Mai 2015
FISH Shell: A dynamic shell - https://news.ycombinator.com/item?id=8783150 - Dezember 2014
Fish shell 2.1 - https://news.ycombinator.com/item?id=6626635 - Oktober 2013
fish shell - https://news.ycombinator.com/item?id=6224524 - August 2013
Fish shell 2.0 - https://news.ycombinator.com/item?id=5723235 - Mai 2013
Fish 2.0 shell beta - https://news.ycombinator.com/item?id=5567639 - April 2013
Fish: Finally, a command line shell for the 90s - https://news.ycombinator.com/item?id=4073162 - Juni 2012
Fish sucks (but your shell sucks more) - https://news.ycombinator.com/item?id=2031110 - Dezember 2010
Fish - The friendly interactive shell - https://news.ycombinator.com/item?id=820677 - September 2009
Fish Shell: A User-Friendly Shell or Like a Heavily Customized zsh - https://news.ycombinator.com/item?id=811113 - September 2009
https://news.ycombinator.com/item?id=23660910 könnte ein Fallenlink sein, um herauszufinden, wer zuschaut :)
Ich habe zsh eine Zeit lang ausprobiert, aber im Grundzustand ist es faktisch ähnlich wie bash, und mein Eindruck war, dass man Zeit in die Anpassung investieren muss, um seine Vorteile zu sehen. Ich möchte keine Zeit mit Shell-Konfiguration verbringen, sondern will, dass es einfach sofort funktioniert
Fish ist schon ganz ohne Konfiguration deutlich besser als bash, und die magische Autovervollständigung verändert das Leben regelrecht
An der Uni habe ich fish unter Ubuntu genutzt, und auch das MacBook, das ich bei meinem ersten Job bekam, habe ich auf fish umgestellt. Es gab nur eine Person für DevOps, und die Dokumentation und Skripte zur App-Konfiguration waren nur für zsh oder bash geschrieben; ehrlich gesagt dachte ich, es wäre okay, einfach zu zsh zu wechseln
Aber diese Person hat mich davon abgehalten, sich einen halben Tag lang in fish eingearbeitet und sogar alle fish-Skripte in die Dokumentation ergänzt. Wirklich ein großartiger Mensch
Das Gute an fish ist, dass es schon von Anfang an, ohne Plugins zu installieren, ziemlich viele Komfortfunktionen bietet. Dazu habe ich nur noch die Integration von starship.rs und fzf ergänzt
Mir gefällt der Tagline von fish sehr, und sie ist ziemlich witzig. Ich habe es eine Weile benutzt, und es war absolut in Ordnung, aber die Entwicklungsstrategie vermeidet ausdrücklich konfigurierbare Optionen
Ein paar Dinge haben mich immer wieder gestört, aber es gab keine Möglichkeit, das Verhalten zu ändern, also bin ich zu zsh gewechselt und habe es so eingerichtet, dass es sich wie fish verhält, aber auf die Art, die ich möchte. Für mich war das eine gute Entscheidung und empfehlenswert. oh-my-zsh oder Plugin-Manager mag ich auch nicht besonders
Ich nutze fish, zsh und inzwischen auch elvish; wichtig sind für mich Autosuggestions und die Möglichkeit, mit Pfeil nach oben die History aufzurufen. Für zsh gibt es ein Autosuggestions-Modul, und elvish hat eine History über Pfeil nach oben, gleicht aber nur den Anfang ab
Deshalb liegt fish für mich immer noch vorn, und elvish ist Zweiter, weil es sich fast wie Autosuggestions anfühlt, wenn man einen Befehl eingibt und einmal Pfeil nach oben drückt. Ich habe nicht herausgefunden, wie man das in zsh macht, und beim Umgang mit Blöcken gefallen mir die Ansätze von fish und elvish ebenfalls besser als der traditionelle Stil der sh-Familie
Der größte Fehler von fish ist, dass es nicht bash-kompatibel ist. Ich bin zu sehr an bash gewöhnt, und es gibt Firmensysteme, auf denen nur bash verfügbar ist und fish nicht installiert werden kann, daher möchte ich nicht wechseln
Ständig zwischen verschiedenen Skriptsprachen wechseln zu müssen, ist schmerzhaft, und man wird es nicht bequem aus dem Muskelgedächtnis heraus tun können
#!/bin/bashschreiben und weiter in bash skripten, während man nur die interaktive Shell als fish nutzt?Persönlich packe ich selten so komplexe Dinge in die Shell, und wenn es bis dahin kommt, lagere ich es in ein Skript aus
basshatte ich kaum das Gefühl, wechseln zu müssenhttps://github.com/edc/bass
Ich nutze fish nicht, aber es hat eine hervorragende Funktion, die in zsh noch nicht nachgebaut wurde: Es erzeugt Autovervollständigungen aus Manpages, sodass man für fast jedes Programm automatisch grundlegende Flag-Vervollständigungen bekommt