Artikel vom 21. Aug 2016 - Eher zufällig bin in vor Kurzem über die Shell [b]„fish“[/b] gestolpert… also ich habe davon gelesen. Also schnell mal installiert und aufgerufen. Ok… ist halt ne Shell, dachte ich. Ein wenig bunter, aber nix… Mooooooment…
Dieser Artikel wurde erstmals am 21. August 2016 veröffentlicht.Eher zufällig bin in vor Kurzem über die Shell
„fish“ gestolpert… also ich habe davon gelesen. Also schnell mal installiert und aufgerufen. Ok… ist halt ne Shell, dachte ich. Ein wenig bunter, aber nix… Mooooooment… Schon beim Eintippen der ersten Kommandos fällt auf, dass da doch einiges anders ist. Es werden direkt bei der Eingabe Vorschläge gemacht, ein Tippen auf TAB öffnet dann eine Liste aller Kommandos, die so beginnen, wie die ersten eingegebenen Buchstaben… und durch

diese Liste kann man mit den Cursortasten navigieren und mit der Eingabetaste den Befehl auswählen.

Das ist ja schon mächtig komfortabel. Gibt man help ein, so wird der System-Webbrowser gestartet (oder wenn er schon offen ist, ein neuer Tab geöffnet) und die Hilfeseite geöffnet.

Hier findet man alle internen Kommandos von fish und die Kontrollstrukturen zur Shellprogrammierung. Außerdem ein FAQ-Bereich und ein Tutorial. Insgesamt ist die Dokumentation wirklich sehr ausführlich… so sollte das auch sein. Weitere Informationen , insbesondere zur Shell-Programmierung und zum Erstellen von Completions (automatische Vervollständigung) findet man auch bei
stack overflow, wenn man im Suchfeld fish

oder fishshell eingibt. Will man fish konfigurieren, so kann man das von Hand erledigen, es geht aber auch recht einfach über ein Web-Interface. Gibt man fish_config ein, so startet Fish einen einfachen lokalen Webserver, öffnet den Browser und man landet auf der Konfigurationsseite. Auf dieser Seite kann man sehr einfach die Farben und den Prompt einstellen, Funktionen und Variablen anschauen, die History anschauen und Einträge daraus löschen, Bindings anschauen und schließlich Abbreviations (Abkürzungen für Befehlszeilen) bearbeiten. Die Installation wird auf der
Homepage von fish gut erläutert… bei meinem Debian war das mit einem
sudo apt-get install fish
im Handumdrehen erledigt, weil sich das Programm in den offiziellen Quellen befindet. Eine wirklich tolle Angelegenheit ist auch die TAB-Selection von Parametern auch externer Programme. Gibt man ein Kommando ein und dann den „-“ oder „--“ für einen Parameter und betätigt die TAB-Taste, dann wird eine Auswahlliste der Parameter

angezeigt (mit Erläuterungen), die man auch wieder mit den Cursortasten auswählen kann. Schon nach kurzer Zeit habe ich festgestellt, dass fish für mich echt perfekt für die tägliche Arbeit ist. Diese Shell wird zwar oft als „Einsteiger-Shell“ angepriesen, aber weshalb sollte ich auf Komfort verzichten, nur weil ich mich mit der bash auch gut auskenne. Wenn ich es bequemer haben kann, dann lasse ich mir das auch gefallen. Deshalb ist fish jetzt als Standard-Shell bei mir eingestellt. Anfangs muss man sich aber auch ein wenig umstellen, weil die sich doch ziemlich vom POSIX-Standard, den man von bash und co. gewohnt ist, unterscheidet. Es gibt aber auch noch einige weitere Quellen im Internet, wo teilweise auch auf diese Besonderheiten oder Unterschiede eingegangen wird. Die erste „Herausforderung“ für mich war der Midnight Commander (mc). Ich habe unter bash immer das Wrapper-Script verwendet, mit dem man nach Beenden des mc im letzten ausgewählten Verzeichnis landet. Nun, diese Scripts funktionieren NICHT! Weder die (ba)sh-, noch die csh-Version. Aber ich war echt erstaunt, wie schnell sich das mit Bordmitteln der fish erledigen ließ. Viel einfacher, als man denken mag. In der Shell kann man Funktionen erstellen (der Editor ist auch angenehm komfortabel). Also habe ich eine Funktion „m“ erstellt:
function m
/usr/bin/mc -P ~/.temp/mcwd
cd (cat ~/.temp/mcwd)
rm ~/.temp/mcwd
end
Und siehe da… das hat schon funktioniert. Die Eingabe von „m“ in der Shell startete den mc und nach Beendigung landete man im letzten Verzeichnis. Prima! Wenn man eine solche Funktion erstellt hat und loggt sich aus, ist sie aber leider wieder weg. Fish hat aber ein Konfigurationsverzeichnis (~/.config/fish/) und dort gibt es ein Unterverzeichnis für Funktionen, die beim Einloggen automatisch eingelesen werden und so dann zur Verfügung stehen. Man muss aber dafür keinen extra Editor bemühen, die Funktion einhämmern und dann dort als Datei abspeichern. Hat man die Funktion in der Shell erstellt und man ist zufrieden damit, so genügt es das Kommando funcsave zu verwenden. Damit wird die Funktion automatisch im Autostart-Verzeichnis gespeichert. Also rasch
funcsave m
eingegeben… und seither steht mir m dauerhaft zur Verfügung. Weil man sich aber daran gewöhnt hat, „mc“ einzugeben, wenn man den Midnight Commander starten will, habe ich noch ein entsprechendes Alias definiert (das läuft so, wie man es von der bash kennt):
alias mc „m“
Um dieses Alias auch direkt nach jedem Login zur Verfügung zu haben trägt man die Zeile einfach in die Datei config.fish ein (~/.config/fish/config.fish), die man ggf. erst erzeugen muss (touch config.fish), wenn sie noch nicht vorhanden ist. Die ganze Angelegenheit hat mich incl. „Einarbeitungszeit“ in die Systematik von fish vielleicht ne Viertelstunde gekostet. Fish ist wirklich einfach! Das war jetzt hier auch nur ein ganz kurzer und kleiner Einblick… es gibt noch unzählige wirklich tolle Features. wenn man sich durch die Dokumentation gelesen hat, ist man schlauer… und man entdeckt immer wieder neue Möglichkeiten. Ach, ein kleines „Schmankerl“ fällt mir gerade noch ein… Hat man sich in ein Verzeichnis gehangelt und dort liegt eine Datei, die man mit dem Standard-Programm für den Dateityp öffnen möchte, so gibt man ganz einfach nur
open <Dateiname>
ein… schon wird die Datei mit der voreingestellten Anwendung geöffnet. odt-Dateien sind bei mir z. B. mit LibreOffice 5.1 verknüpft. Habe ich nun eine Datei „Dokument.odt“ und ich gebe in fish
open Dokument.odt
ein, wird LO-Writer gestartet und die Datei geöffnet. Das ist schon sehr praktisch. Ich kann es echt empfehlen, sich fish einmal anzuschauen. Das ist auch kein „Rückschritt“. Ich bin ja selbst auch mit bash sehr fit, habe aber die Vorteile von fish für mich entdeckt und genieße den größeren Komfort.
Links:
[1]:
Fish-Webseite[2]:
The missing fish shell tutorial[3]:
Speaking UNIX: Go fish![4]:
Shell Translation Dictionary (Übersicht, um (ba)sh-Kommandos in fish umzusetzen)
[5]:
starrhorne/Fish-Shell-Scripts[6]:
zmalltalker/fish-nuggetsa