Lese-Ansicht

PowerShell-Tuning

Glücklicherweise muss ich nicht allzu oft unter Windows arbeiten. Aber hin und wieder — aktuell für die Überarbeitung meines Scripting-Buchs — lässt es sich nicht vermeiden. Wenn schon Windows, dann wenigstens so komfortabel wie möglich! Und so habe ich in den vergangenen Wochen mein Terminal/PowerShell-Setup optimiert:

  • Nerdfont installiert
  • informativen Prompt eingerichtet (Oh My Posh)
  • bessere Tastaturunterstützung im Terminal (Emacs-Tastenkürzel)
  • Editor für den Textmodus installiert (je nach Geschmack: Edit, nano, Emacs, NeoVim)
  • sudo aktiviert

Dieser Artikel liefert dazu ein paar Details. Der Text beweist gleichzeitig, dass man selbst unter Windows mit relativ wenig Mühe ein produktives Setup einrichten kann. Das erforderliche Fundament liefert Microsoft direkt aus: das Windows Terminal mit vielen High-end-Funktionen inklusive GPU-Rendering, die PowerShell sowie das Paketverwaltungskommando winget.

PowerShell in einem Windows Terminal mit den JetBrains Nerd Font und »Oh My Posh«

Nerdfonts

Moderne CLI-Tools stellen im Terminal alle erdenklichen Zeichen und Symbole dar, um auf Dateitypen, den Git-Status oder Fehlerursachen hinzuweisen. In »gewöhnlichen« Fonts fehlen diese Zeichen; im Terminal wird dann ein Rechteck, ein Fragezeichen oder ein anderes Ersatzzeichen angezeigt. Das lässt den Charme moderner Kommandos und Prompt-Frameworks ins Leere laufen. Abhilfe schafft die Installation eines Fonts, der einen Coding-Zeichensatz um Tausende Symbole und Sonderzeichen ergänzt.

Auf der Seite https://nerdfonts.com stehen ca. 100 geeignete Fonts zum freien Download zur Auswahl. Aber welcher Font ist der beste? Wenn Sie sich nicht entscheiden können, ist der beliebte JetBrainsMono Nerd Font eine gute Wahl für erste Experimente. Er basiert auf dem freien Mono-Font der Firma JetBrains (IntelliJ, PyCharm etc.). Dieser Font hat noch einen Vorteil: Er lässt sich im Handumdrehen mit winget installieren. Sie sollten die Installation in einem Terminal mit Admin-Rechten durchführen, damit die Fonts auch dann zur Verfügung stehen, wenn Sie in einem Admin-Terminal arbeiten.

# in einem Admin-Terminal
winget install -e --id DEVCOM.JetBrainsMonoNerdFont

Oh My Posh

Die Fish oder die Zsh mit der Erweiterung »Oh My Zsh« zeigen im Prompt alle erdenklichen Kontextinformationen an: den Hostnamen, den Verzeichnisnamen, den Git-Zweig und -Status etc. Genau das kann auch Oh My Posh, eine Plattform- und Shell-unabhängiges Prompt-Framework. Die Installation gelingt unter Windows am schnellsten mit winget:

winget install JanDeDobbeleer.OhMyPosh -s winget

Damit Oh My Posh in interaktiven PowerShell-Sessions aktiviert wird, bauen Sie die folgenden Anweisungen in die Profile-Datei ein (notepad $Profile, wobei Sie notepad durch Ihren Lieblingseditor ersetzen):

# Datei Documents/PowerShell/Microsoft.PowerShell_profile.ps1
# Oh My Posh nur in interaktiven PowerShell-Sessions verwenden
if (-not [Console]::IsInputRedirected -and 
  (Get-Module -Name PSReadLine -ErrorAction SilentlyContinue)) 
{
  oh-my-posh init pwsh | Invoke-Expression
}

Wenn Sie jetzt ein neues PowerShell-Tab öffnen, wird Oh My Posh erstmals aktiv. Sie werden von einem informativen und mehrfarbigen Default-Prompt begrüßt. Unter https://ohmyposh.dev/docs/themes stehen über 100 weitere Prompt-Themen zur Wahl. Zur Aktivierung bauen Sie den Themennamen in das oh-my-posh-Init-Kommando in der Profile-Datei ein, z.B. so:

# Datei Documents/PowerShell/Microsoft.PowerShell_profile.ps1
oh-my-posh init pwsh --config "easy-term" | Invoke-Expression

Um die neue Konfiguration zu aktivieren, lesen Sie die Profile-Datei neu ein:

. $PROFILE

Starship Eine Alternative zu Oh My Posh ist das Framework Starship. Es wurde in Rust entwickelt und ist schneller/effizienter als Oh My Posh. Dafür gibt es aber weniger vordefinierte Themen; generell ist die Konfiguration sperriger. Ich habe beide Frameworks ausprobiert, bin dann aber bei Oh My Posh geblieben.

Tastenkürzel in der PowerShell

In der PowerShell unterstützt Sie das Modul PSReadLine bei der Kommandoeingabe (siehe auch die Dokumentation zu Set-PSReadLineOption). Standardmäßig schlägt PSReadLine das letzte Kommando mit den selben Anfangsbuchstaben zur Vervollständigung durch Cursor rechts vor. Tab bewirkt, dass begonnenen Dateinamen oder Schlüsselwörter komplettiert werden.

Das Verhalten von PSReadLine kann durch Optionen in der Profile-Datei beeinflusst werden. Diese Datei öffnen Sie am bequemsten mit notepad $Profile, wobei Sie notepad durch Ihren Lieblingseditor ersetzen. Damit die Änderungen wirksam werden, laden Sie die Datei mit . $Profile neu.

Das folgende Listing schlägt einige Änderungen/Verbesserungen vor. Gleich das erste Kommando bewirkt den größten Unterschied: Nach der Eingabe der ersten Buchstaben haben Sie die Wahl zwischen mehreren ähnlichen zuletzt ausgeführten Kommandos, die Sie mit den Cursortasten aus einer Liste wählen. Mit F2 können Sie zwischen der Listenansicht und dem Defaultverhalten (InlineView) umschalten.

Auswahl aus zuletzt ausgeführten Kommandos, die die Buchstaben »ed« enthalten

Falls Sie bei InlineView bleiben wollen, sollten Sie zumindest die beiden HistorySearch-Kommandos in Erwägung ziehen. Normalerweise blättern Cursor auf und Cursor ab durch alle bisherigen Kommandos. Mit den hier vorgeschlagenen Einstellungen können Sie dagegen git eingeben und dann durch die bisherigen git-Kommandos blättern.

Emacs- und Vi-Fans werden begeistert sein, dass die PowerShell per EditMode die vertrauten Tastenkürzel akzeptiert. Die if-Abfrage im folgenden Listing stellt sicher, dass die Einstellungen nur in interaktiven Sessions gelten, aber z.B. nicht, wenn die PowerShell ein einzelnes Kommando via SSH ausführt.

# Ergänzungen in der Profile-Datei
if (-not [Console]::IsInputRedirected -and 
  (Get-Module -Name PSReadLine -ErrorAction SilentlyContinue)) 
{
  # zeigt Vervollständigungsliste an, Auswahl per Cursortasten
  Set-PSReadLineOption -PredictionViewStyle ListView

  # Cursor auf/ab berücksichtigen die bisherige Eingabe
  Set-PSReadLineKeyHandler -Key UpArrow ` 
                           -Function HistorySearchBackward
  Set-PSReadLineKeyHandler -Key DownArrow `
                           -Function HistorySearchForward

  # Emacs- oder Vi-Tastenkürzel (per Default: Windows-Tastenkürzel)
  Set-PSReadLineOption -EditMode Emacs
  Set-PSReadLineOption -EditMode Vi

  # besser sichtbare Farbe für Inline-Vervollständigung
  Set-PSReadLineOption -Colors @{ InlinePrediction = '#884488' }

  # keine Duplikate in der Kommando-History speichern
  Set-PSReadLineOption -HistoryNoDuplicates
}

Terminal-Editoren

An GUI-Editoren herrscht unter Windows kein Mangel — die Palette reicht von notepad.exe über Notepad++ bis hin zu VS Code und anderen KI-tauglichen Programmen/IDEs. Aber oft wollen Sie einfach nur ein paar Zeilen Text ändern, eine Konfigurationsdatei vervollständigen etc. — und zwar, ohne das Terminal zu verlassen. (Das gilt insbesondere, wenn Sie via SSH remote arbeiten!) Dazu brauchen Sie einen Editor, der im Terminal ausgeführt werden kann.

edit: Durchaus nicht die schlechteste Wahl ist edit. Mitte 2025 hat Microsoft diesen Mini-Editor vorgestellt — als GitHub-Projekt in der Programmiersprache Rust! Damit liegt Microsoft voll im Zeitgeist. Zur Installation führen Sie winget install microsoft.edit aus. In der Folge lädt edit <file> die gewünschte Datei.

Bemerkenswert an edit ist die intuitive, einfache Bedienung. Text wird mit den Cursortasten markiert, mit Strg+C und Strg+V kopiert und wieder eingefügt etc. Die Cursorposition kann mit der Maus verändert werden, auch das lokalisierte Menü lässt sich per Maus bedienen und gibt IT-Veteranen ein wenig Turbo-Pascal-Vibes. Fortgeschrittene Funktionen fehlen allerdings: kein Syntaxhighlighting, keine Code-Vervollständigung, keine Einstellungen …

Der relativ neue CLI-Editor »Edit«

nano: In der Linux-Welt ist nano das Gegenstück zu edit. Der Editor hat zwar nur relativ wenige Funktionen, ist dafür aber einfach zu bedienen. Praktischerweise zeigt das Programm alle erforderlichen Tastenkürzel gleich in der Statusleiste an. Die Installation gelingt unkompliziert mit winget install -e --id GNU.Nano.

vi/NeoVim: Die einen lieben ihn, andere hassen ihn — das Editor-Urgestein vi. Vi-Fans verwenden unter Windows am besten die Variante NeoVim (siehe https://neovim.io). NeoVim ist aber nur die Basis: Damit das Programm sein ganzes Potential ausschöpfen kann, brauchen Sie diverse Erweiterungen (Git, LSP, Fuzzy Finding usw.) und Konfigurationseinstellungen. Das Setup gelingt am schnellsten mit Frameworks wie LazyVim oder AstroNvim.

Emacs: Mich hat der Vi nie überzeugen können, ich bin im Emacs-Lager. Unter Windows ist das allerdings ein Abenteuer. Von abgespeckten Emacs-Klonen wie mg, zile oder jmacs gibt es keine Windows-Ports, die im Terminal funktionieren. Also muss es die Vollversion sein: winget install -e --id GNU.Emacs. winget kümmert sich leider nicht darum, das Emacs-Installationsverzeichnis zum Path hinzuzufügen. Sie müssen sich selbst um diesen Schritt kümmern. Die ausführbare Datei befindet sich üblicherweise in C:\Program Files\Emacs\emacs-<n.n>\bin.

Beim Start des Editors müssen Sie an die Option -nw denken (no window), sonst erscheint der Emacs in einem eigenen Fenster statt im Terminal. Noch eine Besonderheit betrifft die Konfigurationsdatei ~/.emacs. Die Windows-Version des Emacs liest diese Datei normalerweise (abhängig von der HOME-Umgebungsvariablen) nicht aus C:\Users\name\.emacs, sondern aus C:\Users\name\AppData\Roaming\.emacs. Wenn Emacs Unicode-Zeichen fehlerhaft anzeigt, bauen Sie die folgenden Anweisungen in .emacs ein:

# Datei C:\Users\<name>\AppData\Roaming\.emacs
(prefer-coding-system 'utf-8)
(set-default-coding-systems 'utf-8)
(set-terminal-coding-system 'utf-8)
(set-keyboard-coding-system 'utf-8)
(set-language-environment "UTF-8")

sudo

Um unter Windows ein Kommando mit Administratorrechten auszuführen, müssen Sie zuerst umständlich ein Terminal mit Admin-Rechten öffnen. Unter Linux und macOS klappt das mit sudo viel unkomplizierter.

Ab Version 11 / 24H2 gibt es sudo auch unter Windows. Microsoft hat das Kommando komplett neu implementiert und nur den Namen übernommen. Die Funktionsweise und Optionen sind anders als unter Linux oder macOS. Insbesondere gibt es keine (Passwort-)Authentifizierung; stattdessen erscheint vor sudo-Aktivitäten nur der UAC-Bestätigungsdialog (User Account Control).

sudo muss zuerst aktiviert werden. Sie finden die Option in den Einstellungen unter System / Erweitert / Terminal.

sudo unter Windows aktivieren

Es gibt drei Arten, wie sudo-Kommandos ausgeführt werden können: in einem neuen Fenster (gilt per Default, forceNewWindow), mit deaktivierter Eingabe (disableInput, die Standardeingabe wird blockiert) oder inline (normal, also wie unter Linux mit der Möglichkeit, direkt im Terminal mit dem ausgeführten Kommando zu interagieren). Statt in den Einstellungen können Sie sudo auch in einem Terminal mit Admin-Rechten aktivieren:

sudo config --enable forceNewWindow|disableInput|normal

Sobald sudo zur Verfügung steht, können Sie das Kommando wie in den folgenden Beispielen anwenden. (Das erste Kommando setzt voraus, dass das Programm edit installiert ist.)

sudo edit C:\Windows\System32\drivers\etc\hosts
sudo notepad C:\Windows\System32\drivers\etc\hosts
sudo winget upgrade --all
sudo pwsh -c "Restart-Service -Name Spooler"

Beachten Sie, dass sudo Restart-Service -Name Spooler nicht funktioniert! sudo kann nur »echte« Kommandos (Executables) ausführen, keine CmdLets. Für CmdLets müssen Sie den Umweg über eine neue PowerShell-Instanz nehmen.

Der Windows-Implementierung von sudo fehlt auch die Option -s, um eine neue Shell zu starten. Stattdessen führt sudo pwsh zum Ziel.

Sicherheitsbedenken: Microsoft warnt davor, sudo ohne unmittelbare Notwendigkeit zu aktivieren. Die Warnung bezieht sich insbesondere auf die Inline-Variante. In der sudo-Implementierung von Linux wurden über den Verlauf von Jahrzehnten immer neue Sicherheitsprobleme gefunden und behoben. Vor diesem Hintergrund rate ich dazu, die Warnungen Microsofts ernst zu nehmen. sudo ist eine vergleichsweise neue, bislang eher selten genutzte Funktion.

gsudo: Eine Alternative sudo ist das schon länger verfügbare Kommando gsudo. Dieses Open-Source-Projekt bietet mehr Features als die Microsoft-Implementierung.

Quellen/Links

Editoren

sudo

  •  

GNOME 50.1 bringt Fehlerkorrekturen

GNOME liefert das erste Wartungsupdate für Version 50 und konzentriert sich dabei ganz auf Stabilität. Die neue Ausgabe verbessert viele zentrale Anwendungen und Bibliotheken und soll ein problemloses Upgrade ermöglichen. Die Entwickler sprechen von einem ruhigen Update, das dennoch spürbare Verbesserungen bringt. Mehrere Kernprogramme erhalten neue Versionen. Epiphany wurde überarbeitet und nutzt wieder frühere Filterlisten […]

Der Beitrag GNOME 50.1 bringt Fehlerkorrekturen erschien zuerst auf fosstopia.

  •  

GNOME 49.5 bringt Stabilität und Sicherheit

Die GNOME Entwickler haben ein neues Wartungsupdate für die 49er Reihe veröffentlicht. GNOME 49.5 liefert viele Korrekturen und aktualisiert zahlreiche zentrale Komponenten. Die Aktualisierung umfasst neue Versionen von Shell, Mutter, Nautilus und weiteren Modulen. Besonders GLib 2.86.4 erhält wichtige Sicherheitskorrekturen die mehrere Schwachstellen beseitigen. Auch Libadwaita, GTK und libsoup wurden überarbeitet und sorgen für mehr […]

Der Beitrag GNOME 49.5 bringt Stabilität und Sicherheit erschien zuerst auf fosstopia.

  •  

GNOME 51 “A Coruña” nimmt Fahrt auf: Erste Details zum nächsten großen Desktop

Die GNOME‑Gemeinschaft richtet den Blick bereits auf die kommende Ausgabe des beliebten Linux‑Desktops. Die Veröffentlichung von GNOME 51 ist für den 16. September 2026 geplant und markiert den nächsten Schritt nach dem frischen GNOME 50 Release. Die Entwickler haben die Arbeit am neuen Zyklus direkt nach dem Start von GNOME 50 aufgenommen. Konkrete Neuerungen sind […]

Der Beitrag GNOME 51 “A Coruña” nimmt Fahrt auf: Erste Details zum nächsten großen Desktop erschien zuerst auf fosstopia.

  •  

GNOME 48.10 schließt die Serie mit wichtigen Korrekturen ab

GNOME 48.10 wurde vom GNOME Projekt veröffentlicht und markiert den letzten Wartungsschritt dieser Serie. Die Aktualisierung bringt viele gezielte Fehlerbehebungen, die den Desktop spürbar stabiler machen. Mehrere Kernkomponenten erhalten Verbesserungen, die sich direkt im Alltag bemerkbar machen. GNOME Shell reagiert nun zuverlässiger nach dem Aufwachen des Systems. Probleme mit der Tastaturauswahl und der Navigation in […]

Der Beitrag GNOME 48.10 schließt die Serie mit wichtigen Korrekturen ab erschien zuerst auf fosstopia.

  •  

GNOME 50 „Tokyo“ ist da. Das ist neu

Das GNOME Projekt hat am 18. März 2026 die neue Version 50 der gleichnamigen Desktopumgebung veröffentlicht und liefert ein großes Paket an Neuerungen. Die Entwickler setzen dabei auf mehr Kontrolle, bessere Bedienung und moderne Technik. Viele Änderungen betreffen den Alltag der Nutzer. Ein Schwerpunkt liegt auf neuen Funktionen für Familien. Eltern können nun beim Erstellen […]

Der Beitrag GNOME 50 „Tokyo“ ist da. Das ist neu erschien zuerst auf fosstopia.

  •  

Letzter Test vor dem Start: GNOME 50 Release Candidate

Die kommende GNOME Version rückt näher und der Veröffentlichungskandidat zeigt klar, wohin die Reise geht. Die Entwickler haben viele Details verfeinert und zugleich einige tiefgreifende Neuerungen eingebaut, die den Desktop im Alltag spürbar verbessern sollen. Die RC Version bringt erstmals HDR Bildschirmfreigabe und optimiert die Zusammenarbeit mit NVIDIA Grafikkarten. Dazu kommen ein neuer Farbmodus namens […]

Der Beitrag Letzter Test vor dem Start: GNOME 50 Release Candidate erschien zuerst auf fosstopia.

  •  

GNOME 49.4 bringt zahlreiche Korrekturen für den Alltag

GNOME liefert ein neues Wartungsupdate und konzentriert sich klar auf Stabilität. Die Entwickler sprechen selbst von einer unspektakulären Version, doch viele Nutzer dürften die Verbesserungen schnell bemerken. Die Aktualisierung behebt Probleme bei der Erfassung von Bildschirmzeiten und korrigiert Fehler im Schnellmenü. Auch eine Lücke bei der Eingabe von Passwörtern wurde geschlossen. Zudem verschwinden mehrere Speicherlecks […]

Der Beitrag GNOME 49.4 bringt zahlreiche Korrekturen für den Alltag erschien zuerst auf fosstopia.

  •  

GNOME 50 geht in öffentliche Beta mit neuen Features

Die neue Beta von GNOME 50 zeigt klar wohin die Reise geht. Das Projekt liefert eine breite Palette an Verbesserungen die viele Bereiche der Desktopumgebung betreffen. Schon jetzt wirkt die kommende Version deutlich runder und moderner. Die Shell erkennt diskrete GPUs zuverlässiger und reagiert schneller auf geänderte Tastaturlayouts. Auch die Kurzbefehle erhalten ein präziseres Fokusverhalten. […]

Der Beitrag GNOME 50 geht in öffentliche Beta mit neuen Features erschien zuerst auf fosstopia.

  •  

GNOME 48.9 bringt Korrekturen für das ältere Desktop‑Release

GNOME hat die Version 48.9 veröffentlicht und liefert damit eine Wartungsversion für Nutzer der älteren Desktopreihe. Das Update konzentriert sich auf Stabilität und beseitigt mehrere lästige Fehler. Besonders Nautilus profitiert von der neuen Version. Der Dateimanager stürzt bei MTP Geräten nicht mehr ab und zeigt Vorschaubilder wieder zuverlässiger. Auch das Verhalten der Seitenleiste wirkt nun […]

Der Beitrag GNOME 48.9 bringt Korrekturen für das ältere Desktop‑Release erschien zuerst auf fosstopia.

  •  

GNOME 49.3 liefert wichtige Korrekturen

GNOME hat die nächste Wartungsversion der aktuellen Brescia Reihe veröffentlicht. GNOME 49.3 wirkt auf den ersten Blick unspektakulär, bringt jedoch viele gezielte Verbesserungen für einen stabileren Alltag. Neue Funktionen fehlen bewusst, denn das Update konzentriert sich vollständig auf Fehlerbehebungen. Ein zentraler Bestandteil ist die aktualisierte Glib 2.86.3 Version. Sie schließt mehrere Sicherheitslücken, die unterschiedliche Bereiche […]

Der Beitrag GNOME 49.3 liefert wichtige Korrekturen erschien zuerst auf fosstopia.

  •  

GNOME 48.8 stopft Sicherheitslücken und bringt Fehlerkorrekturen

Das GNOME Projekt hat eine neue Ausgabe der Bengaluru Serie veröffentlicht. GNOME 48.8 konzentriert sich auf Pflege, die den Desktop im Alltag spürbar robuster machen. Viele kleine Korrekturen sorgen für ein runderes Erlebnis ohne große Neuerungen. Im Kontrollzentrum wurden mehrere lang bekannte Probleme behoben. Die Verwaltung einzelner WLAN Geräte reagiert nun zuverlässiger. Eine kleine Speicherleckage […]

Der Beitrag GNOME 48.8 stopft Sicherheitslücken und bringt Fehlerkorrekturen erschien zuerst auf fosstopia.

  •  

GNOME 49.2 bringt Pflege für den Linux Desktop

Das GNOME Projekt hat die Version 49.2 veröffentlicht und liefert damit das zweite Pointrelease für die aktuelle Brescia Serie. Rund sechs Wochen nach dem letzten Release folgt nun eine Sammlung von Verbesserungen und Fehlerkorrekturen, die den Alltag vieler Nutzer spürbar erleichtern sollen. Besonders auffällig sind die Änderungen an der Eingabe und Darstellung. Sticky Keys und […]

Der Beitrag GNOME 49.2 bringt Pflege für den Linux Desktop erschien zuerst auf fosstopia.

  •  

GNOME 48.7 bringt Verbesserungen für den Linux Desktop

Das GNOME Projekt hat die Version 48.7 veröffentlicht und spricht von einem unspektakulären Wartungsupdate. Dennoch steckt in diesem Release mehr als nur Routinearbeit. Viele zentrale Module der Desktopumgebung erhielten neue Versionssprünge und kleinere Optimierungen. Besonders die GNOME Shell wurde überarbeitet und beseitigt mehrere lästige Probleme. Dazu gehören ein falsches Netzwerksymbol bei Verbindungsverlust, eine bessere Sortierung […]

Der Beitrag GNOME 48.7 bringt Verbesserungen für den Linux Desktop erschien zuerst auf fosstopia.

  •  

Wie ein fish im Wasser

Seit über 30 Jahren nutze ich Linux, und knapp 25 Jahre davon war die bash meine Shell. Ein eigener Prompt, der das aktuelle Verzeichnis farbig anzeigte, was das Maß der Dinge :-)

Mein Umstieg auf die zsh hatte mit Git zu tun: Die zsh in Kombination mit der Erweiterung Oh my zsh gibt im Prompt direktes Feedback über den Zustand des Repositories (aktiver Zweig, offene Änderungen). Außerdem agiert die zsh in vielen Details »intelligenter« (ein viel strapazierter Begriff, ich weiß) als die bash. Es macht ein wenig Arbeit, bis alles so funktioniert wie es soll, aber ich war glücklich mit meinem Setup.

Seit ein paar Monaten habe ich die Default-Shell meiner wichtigsten Linux-Installationen neuerlich gewechselt. Ich gehöre jetzt zum rasch wachsenden Lager der fish-Fans. fish steht für Friendly Interactive Shell, und die Shell wird diesem Anspruch wirklich gerecht. fish bietet von Grund auf eine Menge Features, die zsh plus diverse Plugins inklusive Oh my zsh erst nach einer relativ mühsamen Konfiguration beherrschen. Die Inbetriebnahme der fish dauert bei den meisten Distributionen weniger als eine Minute — und die Defaultkonfiguration ist so gut, dass weitere Anpassungen oft gar nicht notwendig sind. Und sollte das doch der Fall sein, öffnet fish_config einen komfortablen Konfigurationsdialog im Webbrowser (außer Sie arbeiten in einer SSH-Session).

Die Stärken der fish im Vergleich zu bash und zsh haben aus meiner Sicht wenig mit der Funktionalität zu tun; einige Features der fish lassen sich auch mit bash-Hacks erreichen, fast alle mit zsh-Plugins. Der entscheidende Vorteil ist vielmehr, dass die fish out of the box zufriedenstellend funktioniert. Für mich ist das deswegen entscheidend, weil ich viele Linux-Installationen verwende und keine Zeit dafür habe, mich jedesmal mit dem Shell-Setup zu ärgern. Deswegen hatte ich in der Vergangenheit auf meinen wichtigsten Installationen zsh samt einer maßgeschneiderten Konfiguration, auf allen anderen aber der Einfachheit halber die bash oder eine unkonfigurierte zsh-Installation.

Auf den ersten Blick sieht die »fish« aus wie jede andere Shell

Installation

Die Installation ist schnell erledigt. Alle gängigen Distributionen stellen fish als Paket zur Verfügung. Also apt/dnf install fish, danach:

chsh -s $(which fish)

Aus- und neu einloggen, fertig.

Falls Ihnen die fish doch nicht zusagt, ist die bisherige Shell ebenso schnell mit chsh -s $(which bash) oder chsh -s $(which zsh) reaktiviert.

Features

Im Prinzip verhält sich die fish wie jede andere Shell. Insbesondere gelten die üblichen Mechanismen zum Start von Kommandos, zur Ein- und Ausgabeumleitung mit < und >, zur Bildung von Pipes mit | sowie zur Verarbeitung von Kommandoergebnissen mit $(cmd). Was ist also neu?

  • Während der Eingabe verwendet die fish Farben, um verschiedene Bestandteile Ihres Kommandos (z.B. Zeichenketten) zu kennzeichnen. Das sieht nett aus, der entscheidende Vorteil ist aber, dass Sie oft Tippfehler erkennen, bevor Sie Return drücken: Kommandos, die es gar nicht gibt, werden rot hervorgehoben, ebenso nicht geschlossene Zeichenketten. (Die Farben sind vom aktiven Farbschema abhängig.)
  • Die Vervollständigung von Kommandos, Optionen, Datei- und Variablennamen mit der Tabulator-Taste ist noch »intelligenter« als bei bash und zsh. fish greift dazu auf über 1000 *.fish-Dateien im Verzeichnis /usr/share/fish/completions zurück, die Regeln für alle erdenklichen Fälle enthalten und mit jeder fish-Version erweitert werden. Die fish zeigt sogar kurze Hilfetexte an (siehe die folgende Abbildung). Wenn es viele mögliche Vervollständigungen gibt, zeigt fish diese in mehreren Spalten an. Sie können mit den Cursortasten das gewünschte Element auswählen.

  • Bei der Eingabe von Kommandos durchsucht die fish die History, also eine Datei, in der alle zuletzt ausgeführten Kommandos gespeichert wurden. In etwas blasserer Schrift schlägt es das passendste Kommando vor. Die fish berücksichtigt dabei auch den Kontext (welches Verzeichnis ist aktiv, welche Kommandos wurden vorher ausgeführt) und schlägt oft — fast schon ein wenig unheimlich — das richtige Kommando vor. Wenn Sie dieses Kommando ausführen möchten, vervollständigen Sie die Eingabe mit Cursor rechts (nicht Tabulator!) und drücken dann Return. Durch ähnliche Kommandos können Sie mit den Cursortasten blättern.

  • Alternativ können Sie auch mit Strg+R suchmuster nach früher ausgeführten Kommandos suchen. Die fish sucht nach dem Muster nicht nur in den Anfangsbuchstaben, sondern in den gesamten Zeichenketten der History.

  • Wenn das aktuelle Verzeichnis Teil eines Git-Repositories ist, zeigt fish den Namen des aktuellen Zweigs in Klammern an. (Wenn Sie mehr Git-Infos sehen wollen, ändern Sie die Prompt-Konfiguration.)

Die »fish« zeigt Hilfetexte zu allen »mysql«-Optionen an, die mit »–default« beginnen.

Globbing-Eigenheiten

In Shells wird die Umwandlung von *.txt in die Liste passender Dateinamen als »Globbing« bezeichnet. Die fish verhält sich dabei fast gleich wie die bash — aber mit einem kleinen Unterschied: Wenn es keine passenden Dateien gibt (z.B. keine einzige Datei mit der Endung .txt), löst die fish einen Fehler aus. Die bash übergibt dagegen das Muster — also *.txt — an das Kommando und überlässt diesem die Auswertung. In der Regel tritt der Fehler dann dort auf. Also kein großer Unterschied?

Es gibt Sonderfälle, in denen das Verhalten der bash günstiger ist. Stellen Sie sich vor, Sie wollen mit scp alle *.png-Dateien von einem externen Rechner auf Ihren lokalen Rechner übertragen:

scp externalhost:*.png .

In der bash funktioniert das wie gewünscht. Die fish kann aber mit externalhost:*.png nichts anfangen und löst einen Fehler aus. Abhilfe: Sie müssen das Globbing-Muster in Anführungszeichen stellen, also:

scp "externalhost:*.png" .

Analoge Probleme können auch beim Aufruf von Paketkommandos auftreten. apt install php8-* funktioniert nicht, wohl aber apt install "php8-*". Hintergründe zum Globbing-Verhalten können Sie hier nachlesen:

Tastenkürzel

Grundsätzlich gelten in der fish dieselben Tastenkürzel wie in der bash. In der fish gibt es darüberhinaus weitere Kürzel, von denen ich die wichtigsten hier zusammengestellt habe. bind oder fish_config (Dialogblatt bindings) liefert eine wesentlich längerer Liste aller Tastenkürzel. Beachten Sie, dass es vom Desktopsystem und vom Terminal abhängt, ob die Alt-Tastenkürzel wirklich funktionieren. Wenn die Kürzel vom Terminal oder dem Desktopsystem verarbeitet werden, erreichen Sie die fish nicht.

Kürzel              Bedeutung
------------------  -------------------------------------------------------
Alt+Cursor links    führt zurück ins vorige Verzeichnis (prevd)
Alt+Cursor rechts   macht die obige Aktion rückgängig (nextd)
Alt+E               öffnet den Dateinamen mit $EDITOR
Alt+H oder F1       zeigt die man-Seite zum eingegebenen Kommando an (Help)
Alt+L               führt ls aus
Alt+P               fügt der Eingabe &| less hinzu (Pager)
Alt+S               fügt sudo am Beginn der Eingabe ein
Alt+W               zeigt Aliasse und eine Beschreibung des Kommandos (What is?)

Noch eine Anmerkung zu Alt+S: In meiner Praxis kommt es ständig vor, dass ich sudo vergesse. Ich führen also dnf install xy aus und erhalte die Fehlermeldung, dass meine Rechte nicht ausreichen. Jetzt drücke ich einfach Alt+S und Return. Die fish stellt sudo dem vorigen, fehlgeschlagenen Kommando voran und führt es aus.

Konfiguration

Das Kommando fish_config öffnet einen Konfigurationsdialog im Webbrowser. Falls Ihr Webbrowser gerade minimiert ist, müssen Sie das Fenster selbst in den Vordergrund bringen. Im Browser können Sie nun ein Farbenschema auswählen, noch mehr Informationen in den Prompt integrieren, die Tastenkürzel nachlesen etc.

In SSH-Sessions scheitert der Start eines Webbrowsers. In diesem Fall können Sie mit fish_config prompt bzw. fish_config theme das Promptaussehen und das Farbschema direkt im Textmodus verändern.

fish-Konfiguration im Webbrowser

Wenn Sie Änderungen durchführen, werden diese im Terminal mit set -U fish_xxx newvalue ausgeführt und in Konfigurationsdateien in .config/fish gespeichert, insbesondere in:

~/.config/fish/fish_variables                (Farbeinstellungen)
~/.config/fish/functions/fish_prompt.fish    (Prompt)

Das Gegenstück zu .bashrc oder .zshrc ist die Datei .config/fish/config.fish. Das ist der richtige Ort, um eigene Abkürzungen zu definieren, den PATH zu erweitern etc. config.fish enthält einen vordefinierten if-Block für Einstellungen, die nur für interaktive fish-Sessions relevant sind. Alle anderen Einstellungen, die z.B. in Scripts gelten sollen, führen Sie außerhalb durch. Das folgende Listing zeigt ein paar typische Einstellungen:

# Datei .config/fish/config.fish
...

# PATH ändern
fish_add_path ~/bin
fish_add_path ~/.local/bin

# keine fish-Welcome-Nachricht
set -U fish_greeting ""

# Einstellungen nur für die interaktive Nutzung
if status is-interactive
    # abr statt alias
    abbr -a ls eza
    abbr -a ll 'eza -la'
    abbr -a gc 'git commit'

    # Lieblingseditor
    set -gx EDITOR /usr/bin/jmacs
end

Das obige Listing zeigt schon, das die fish gängige Einstellungen anders handhabt als bash und zsh:

Abkürzungen: Anstelle von alias sieht die fish das Kommando abbr vor. alias steht auch zur Verfügung, von seinem Einsatz wird aber abgeraten. abbr unterscheidet sich durch ein paar Details von alias: Die Expansion in das Kommando erfolgt bereits, wenn Sie Return drücken. Sie sehen daher, welches Kommando wirklich ausgeführt wird, und dieses Kommando (nicht die Abkürzung) wird in der History gespeichert.

PATH-Änderungen: Sie müssen die PATH-Variable nicht direkt verändern, sondern können stattdessen fish_add_path aufrufen. Ihr Pfad wird am Ende hinzugefügt, wobei die Funktion sicherstellt, dass es keine Doppelgänger gibt.

Variablen (set): Die Optionen des set-Kommandos zur Einstellung von Variablen funktionieren anders als in der bash:

  • -g: Die Variable ist in der gesamten fish-Session zugänglich (Global Scope), nicht nur in einer Funktion oder einem Block.
  • -x: Die Variable wird an Subprozesse weitergegeben (Export).

  • -U: Die Variable wird dauerhaft in .config/fish/fish_variables gespeichert und gilt daher auch für künftige fish-Sessions (Universal). Sie wird aber nicht exportiert, es sei denn, Sie verwenden -Ux.

  • -l: Definiert eine lokale Variable, z.B. innerhalb einer Funktion.

Zusätzliche eingebaute Kommandos

Jede Shell hat eine Menge integrierter Kommandos wie cd, if oder set. In der fish können Sie mit builtin -n alle derartigen Kommandos auflisten. Die meisten Kommandos entsprechen exakt den bash- und zsh-Vorgaben. In der fish gibt es aber einige originelle Erweiterungen: math führt einfache Berechnungen aus, random produziert ganzzahlige Zufallszahlen, string manupuliert Zeichenketten ohne die umständliche Parametersubstitution, path extrahiert Komponenten aus einem zusammengesetzten Dateinamen, count zählt Objekte (vergleichbar mit wc -l etc. Das folgende Listing zeigt die Anwendung dieser Kommandos:

math "2.5 * 3.8"

  9.5

string split " "  "lorem ipsum dolor est"

  lorem
  ipsum
  dolor
  est

string replace ".png" ".jpg" file1.png file2.png file3.png

  file1.jpg
  file2.jpg
  file3.jpg

string sub -s 4 -e 8 "abcdefghijkl"   # Start und Ende inklusive

  defgh

path basename /home/kofler/images/img_234.png

  img_234.png

path dirname /home/kofler/images/img_234.png

  /home/kofler/images

path extension /home/kofler/images/img_234.png

  .png

random 1 100

  13

random choice a b c

  c

count *          # das aktuelle Verzeichnis hat
                 # 32 Dateien/Verzeichnisse
  32

ps ax | count    # gerade laufen 264 Prozesse

  264

Programmierung

Die Bezeichnung Friendly Interactive Shell weist schon darauf hin: Die fish ist für die interaktive Nutzung optimiert, nicht für die Programmierung. Die fish unterstützt aber sehr wohl auch die Script-Programmierung. Diese ist insofern attraktiv, weil die fish-Entwickler auf maximale Kompatibilität verzichtet haben und die schlimmsten Syntaxungereimtheiten der bash behoben haben. fish-Scripts sind daher ungleich leichter zu verstehen als bash-Scripts. Umgekehrt heißt das leider: fish-Scripts sind inkompatibel zu bash und zsh und können nur ausgeführt werden, wo die fish zur Verfügung steht. Für mich ist das zumeist ein Ausschlusskriterium.

Anstelle einer systematischen Einführung will ich Ihnen hier anhand eines Beispiels die Vorteile der fish beim Programmieren nahebringen. Das Script ermittelt die Anzahl der Zeilen für alle *.txt-Dateien im aktuellen Verzeichnis. (Ich weiß, wc -l *.txt wäre einfacher; es geht hier nur darum, diverse Syntaxeigenheiten in wenig Zeilen Code zu verpacken.) Die bash-Variante könnte so aussehen:

#!/bin/bash
files=(*.txt)
if [ ${#files[@]} -eq 0 ]; then
    echo "No .txt files found"
    exit 1
fi
for file in "${files[@]}"; do
    if [ -f "$file" ]; then
        lines=$(wc -l < "$file")
        echo "$file: $lines lines"
    fi
done

Das äquivalente fish-Script ist deutlich besser lesbar:

#!/usr/bin/env fish
set files *.txt
if not count $files > /dev/null
    echo "No .txt files found"
    exit 1
end
for file in $files
    if test -f $file
        echo "$file: "(count < $file)" lines"
    end
end

Auf ein paar Details möchte ich hinweisen:

  • Kontrollstrukturen werden generell mit end abgeschlossen, nicht mit fi für if oder mit esac für case.
  • Bedingungen für if, for etc. müssen weder in eckige Klammern gestellt noch mit einem Strichpunkt abgeschlossen werden.

  • Die fish verarbeitet Variablen korrekt selbst wenn sie Dateinamen mit Leerzeichen enthalten. Es ist nicht notwendig, sie in Anführungszeichen zu stellen (wie bei "$file" im bash-Script).

Wenn Sie in eigenen Scripts Optionen und andere Parameter verarbeiten möchten, hilft Ihnen dabei das Builtin-Kommando argparse. Eine gute Zusammenstellung aller Syntaxunterschiede zwischen bash und fish gibt die fish-Dokumentation.

Paketmanager fisher

Das Versprechen von fish ist ja, dass fast alles out-of-the-box funktioniert, dass die Installation von Zusatzfunktionen und deren Konfiguration ein Thema der Vergangenheit ist. Aber in der Praxis tauchen trotzdem immer Zusatzwünsche auf. Mit dem Paketmanager fisher können Zusatzmodule installiert werden. Eine Sammlung geeigneter Plugins finden Sie hier.

Die Geschichte von fish

Die fish ist erst in den letzten Jahren so richtig populär geworden. Das zeigt, dass es auch in der Linux-Welt Modetrends gibt. fish ist nämlich alles andere als neu. Die erste Version erschien bereits 2005.

fish wurde ursprünglich in C entwickelt, dann nach C++ und schließlich nach Rust portiert. Erst seit Version 4.0 (erschienen im Februar 2025) besteht fish ausschließlich aus Rust-Code sowie in fish selbst geschriebenen Erweiterungen.

Fazit

Die fish punktet durch die gut durchdachte Grundkonfiguration und die leichte Zugänglichkeit (Konfiguration und Hilfe im Webbrowser). Es gibt nicht das eine Feature, mit dem sich die fish von anderen Shells abhebt, es ist vielmehr die Summe vieler, gut durchdachter Kleinigkeiten und Detailverbesserungen. Das Arbeiten in der fish ist intuitiver als bei anderen Shells und macht mehr Spaß. Probieren Sie es aus!

Bei der Programmierung ist die fish inkompatibel zu anderen Shells und insofern kein Ersatz (auch wenn die fish-eigenen Features durchaus spannend sind). Zur Ausführung traditioneller Shell-Scripts brauchen Sie weiterhin eine traditionelle Shell, am besten die bash.

Quellen/Links

YouTube-Videos

  •  

GNOME 48.5 veröffentlicht: Wartungsupdate bringt viele Detailverbesserungen

Das GNOME Projekt hat die Version 48.5 der Desktopumgebung veröffentlicht. Es handelt sich um das fünfte Wartungsupdate der Serie GNOME 48 Bengaluru, das rund fünf Wochen nach der Version 48.4 erscheint. Der Fokus liegt wie gewohnt auf Stabilität und Feinabstimmung. Verbessert wurde unter anderem die Unterstützung für WPA2-Enterprise Netzwerke. Auch das Verhalten von Erweiterungen beim Aktivieren oder Deaktivieren […]

Der Beitrag GNOME 48.5 veröffentlicht: Wartungsupdate bringt viele Detailverbesserungen erschien zuerst auf fosstopia.

  •  

GNOME Shell 49 „Brescia“ ist da – das ist neu

Sechs Monate nach der letzten Version ist GNOME 49 erschienen. Die neue Ausgabe trägt den Namen Brescia, benannt nach der italienischen Stadt, die in diesem Jahr die GUADEC Konferenz beherbergte. Das Update bringt zahlreiche Neuerungen für Multimedia, Produktivität und Nutzererlebnis. Eine der auffälligsten Veränderungen betrifft die Medienwiedergabe. Der bisherige Totem Player wurde durch Showtime ersetzt. […]

Der Beitrag GNOME Shell 49 „Brescia“ ist da – das ist neu erschien zuerst auf fosstopia.

  •  

GNOME 48.4 veröffentlicht: Neue Wartungsversion bringt spürbare Verbesserungen

Das GNOME-Projekt hat mit Version 48.4 ein weiteres Wartungsupdate für die Desktopumgebung GNOME 48 „Bengaluru“ veröffentlicht. Rund fünf Wochen nach dem vorherigen Update bringt die neue Version eine Reihe gezielter Korrekturen und Optimierungen mit sich. Ziel ist es, die Stabilität und Alltagstauglichkeit weiter zu erhöhen. Eine der auffälligsten Neuerungen betrifft die Update-Benachrichtigungen der GNOME-Software-Anwendung. In […]

Der Beitrag GNOME 48.4 veröffentlicht: Neue Wartungsversion bringt spürbare Verbesserungen erschien zuerst auf fosstopia.

  •  

GNOME 48.3 bringt zahlreiche Verbesserungen und Fehlerbehebungen

Das GNOME Projekt hat Version 48.3 des aktuellen „Bengaluru“ Desktops veröffentlicht. Es handelt sich um das dritte Wartungsupdate der im Frühjahr gestarteten GNOME 48 Reihe. GNOME 48.3 erweitert den Dateimanager Nautilus um Filter für neue Audio- und Videoformate. Zudem wurde eine Begrenzung visueller Hinweise in Mutter eingeführt, um Vorgaben der Europäischen Barrierefreiheitsrichtlinie zu erfüllen. Barrierefreiheit […]

Der Beitrag GNOME 48.3 bringt zahlreiche Verbesserungen und Fehlerbehebungen erschien zuerst auf fosstopia.

  •  

Glow Markdown in der Shell rendern

Markdown ist eine leicht verständliche Auszeichnungssprache für Texte. Einige von Euch kennen jene aus Readme-Dateien aus Git Repositories, Dokumentationen und von statischen Bloggeneratoren wie Hugo, oder Jekyll. Markdown bietet für mich entscheidende Vorteile. Ein in Markdown formatierter und strukturierten Text ist für immer in der gewünschten Formatierung betrachtbar. Er ist nicht an ein bestimmtes Programm ... Weiterlesen

Der Beitrag Glow Markdown in der Shell rendern erschien zuerst auf Got tty.

  •  

GNOME kündigt Ende von X11-Sitzungen mit Version 49 an

Mit GNOME 49 entfernt das Projekt offiziell die X11-Sitzung. Diese Änderung wurde nach langer Vorbereitung und Rücksprache mit führenden Linux-Distributionen beschlossen. Die Veröffentlichung ist für Oktober geplant. Xorg bleibt weiterhin gewartet und sicherheitsrelevant gepflegt. Neue Funktionen oder größere Weiterentwicklungen sind jedoch nicht mehr vorgesehen. Der Fokus der Entwickler liegt nun klar auf Wayland als moderner […]

Der Beitrag GNOME kündigt Ende von X11-Sitzungen mit Version 49 an erschien zuerst auf fosstopia.

  •  

GNOME 48.2 bringt frische Verbesserungen – GNOME 47.7 bringt Korrekturen

Die GNOME-Entwickler haben mit Version 48.2 ein neues Wartungsupdate veröffentlicht. Es bringt gezielte Optimierungen für mehr Stabilität und Benutzerfreundlichkeit. Die Einstellungen-App zeigt jetzt mehrere GPU-Namen bei NVIDIA korrekt an. Zudem wurde die Passwort-Generierung überarbeitet und nutzt nun sicherere Wortlisten. Auch die Wiederherstellung maximierter Fenster auf dem richtigen Monitor funktioniert nun besser. Im Webbrowser Epiphany wurden […]

Der Beitrag GNOME 48.2 bringt frische Verbesserungen – GNOME 47.7 bringt Korrekturen erschien zuerst auf fosstopia.

  •  

GNOME Foundation: Steven Deobald wird neuer Geschäftsführer

Die GNOME Foundation hat einen neuen geschäftsführenden Direktor: Steven Deobald übernimmt ab sofort die Leitung der Organisation. Er folgt auf Holly Million, die das Amt im Juli vergangenen Jahres nach kurzer Zeit wieder niedergelegt hatte. Übergangsweise hatte Richard Littauer die Leitung übernommen. Steven Deobald stammt aus Kanada, engagiert sich seit Jahren für freie Software und […]

Der Beitrag GNOME Foundation: Steven Deobald wird neuer Geschäftsführer erschien zuerst auf fosstopia.

  •  

GNOME 48.1 veröffentlicht: Erste Verbesserungen für die neue Version

Das GNOME-Projekt hat Version 48.1 als erstes Wartungsupdate der neuen „Bengaluru“-Reihe veröffentlicht. Die Aktualisierung bringt zahlreiche Fehlerkorrekturen und Feinschliff für bestehende Funktionen mit sich. Mutter, der Fenstermanager von GNOME, erkennt nun Arbeitsplatzwechsel für Screenreader. Zudem wird HDR deaktiviert, wenn veraltete KMS-Treiber verwendet werden. Fällt ein HDR-Monitor aus, schaltet das System auf den Standardfarbmodus zurück. Mutter […]

Der Beitrag GNOME 48.1 veröffentlicht: Erste Verbesserungen für die neue Version erschien zuerst auf fosstopia.

  •  

GNOME 47.6 veröffentlicht: Stabilität und wichtige Fixes

Das GNOME-Projekt hat Version 47.6 der Desktop Umgebung veröffentlicht. Obwohl 47.5 übersprungen wurde, bringt dieses Update viele kleinere Verbesserungen und Bugfixes. Die neue Version richtet sich an Nutzer der GNOME-47-Reihe „Denver“. Ein zentrales Thema ist der Fenstermanager Mutter. Hier wurden Fehler bei Multi-Monitor-Setups mit NVIDIA-Grafik behoben. Weitere Änderungen umfassen Unterstützung für presentation-time v2 und verbesserte […]

Der Beitrag GNOME 47.6 veröffentlicht: Stabilität und wichtige Fixes erschien zuerst auf fosstopia.

  •  
❌