2 Punkte von GN⁺ 2023-08-28 | 2 Kommentare | Auf WhatsApp teilen
  • 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 fish ausgeführt wird; Benutzerdokumentation ist über den help-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 mktemp benötigt; einige optionale Funktionen erfordern zusätzliche Tools
    • Für die Generierung von Autovervollständigungen auf Basis von Handbuchseiten und das webbasierte Konfigurationstool fish_config wird Python 3.5+ benötigt
    • Für die Integration mit der Systemzwischenablage wird eines von xsel, xclip, wl-copy/wl-paste oder pbcopy/pbpaste benötigt
    • Für die vollständige Vervollständigung von yarn und npm wird das NPM-Modul all-the-package-names benötigt
  • 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

 
joyfui 2023-08-28

Ich nutze gerade zsh, aber wenn sich das nächste Mal die Gelegenheit ergibt, sollte ich fish auch mal ausprobieren.

 
GN⁺ 2023-08-28
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.

    • Ich nutze bash und habe ebenfalls keine Geduld für Tool-Konfiguration, aber diese fish-Dotfiles sehen für mich komplizierter aus als meine bash-Konfiguration. Früher nutzten andere Engineers im Team viel fish, aber ich habe nie gesehen, dass fish etwas konnte, was mit bash nicht ging; es sah nur etwas schicker aus.
      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.
    • Vor fast zehn Jahren bin ich genau einmal durch den initialen Einrichtungsassistenten von zsh gegangen[1], das dauerte etwa 5–10 Minuten. Ich verstehe nicht vollständig, was jeder Befehl bedeutet, aber seitdem habe ich nichts mehr daran geändert, und es funktioniert gut.
      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...
    • Stimme fast allem zu. Wenn ich beruflich keine /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.
    • Dass die zsh-Konfiguration mir ständig im Weg stand, hat oh-my-zsh für mich gerettet. Ich habe nur ein sehr kleines Dotfile, das den Großteil der Konfiguration an omz delegiert, und bewahre es in einem Bare-Repo auf, das ich auf jeder neuen Maschine clone.
      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.
    • Wenn man zsh schon so eingerichtet hat, dass man damit zufrieden ist, würde mich interessieren, welche Verbesserungen oder Änderungen ein Wechsel zu fish bringen würde.
  • 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.

    • Eine Sache, die mich davon abhält, es häufiger fürs Scripting zu nutzen, ist das Fehlen eines Fail-on-error-Modus wie set -e in 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.

    • Bei mir war es ähnlich, aber zuletzt bin ich zum Tide-Prompt gewechselt. Er ist in reinem fish geschrieben und wirklich erstaunlich schnell.
    • z ist 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.
    • Mich würde interessieren, wofür du starship nutzt. Es sieht interessant aus, aber ich weiß nicht recht, welche Vorstellung man braucht, um sein Potenzial richtig auszuschöpfen.
    • Wird Reverse Search inzwischen unterstützt? An Autovervollständigung habe ich kein Interesse.
    • Musstest du bestehende Skripte nach fish konvertieren? Oder gibt es dafür eine automatisierte Methode?
  • 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

    • Macht man diese beiden Dinge bei bash nicht normalerweise auch?
    • Wozu braucht man starship.rs?
  • 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

    • Kannst du genauer sagen, was dich gestört hat? Ich will nicht kritisieren, ich bin nur neugierig
      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

    • Kann man nicht oben in Skripte #!/bin/bash schreiben und weiter in bash skripten, während man nur die interaktive Shell als fish nutzt?
    • Interaktiv arbeite ich mit fish, Skripting mache ich mit bash. Wenn es ein Skript ist, das ich nicht in bash schreiben möchte, nehme ich eine echte Programmiersprache wie Python oder Ruby
    • Solange man keine Bedingungen und Schleifen verwendet, merkt man kaum, dass es nicht bash ist
      Persönlich packe ich selten so komplexe Dinge in die Shell, und wenn es bis dahin kommt, lagere ich es in ein Skript aus
    • Mit bass hatte ich kaum das Gefühl, wechseln zu müssen
      https://github.com/edc/bass
    • Das ist kein Fehler, sondern der Kern von fish. Ohne POSIX-Kompatibilität aufzugeben, kann man keine vernünftige Shell-Skriptsprache bauen
  • 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