Eigentlich verbringe ich die meiste Zeit in Linux auf zsh. Aber in der Arbeit wird Windows verwendet und dann muss man sehen, wo man bleibt. Für GUIs habe ich keine Nerven, also habe ich mir PowerShell näher angesehen. Und ich war wirklich überrascht.
Das kann man ja benutzen
Ich versuche nur Software zu lernen, die ich auch privat benutzen würde. Das bedeutet in erster Linie freie Open Source (Linux) Software. Wie schneidet PowerShell hier ab?
Erste Überraschung: PowerShell ist MIT lizenziert. Das war nicht immer so und es gibt auch proprietäre Varianten. Aber zumindest kann man das ohne schlechtes Gewissen mal ausprobieren.
Zweite Überraschung: PowerShell funktioniert unter Linux, macOs und Windows.
Um ehrlich zu sein, das hätte ich nicht von einer Microsoft-Technologie erwartet.
Keine Unix-Shell
Wer bash, sh, zsh, ash und all die Verwandten kennt, wird bald ein paar Unterschiede feststellen:
Die Namen der Befehle
Befehle folgen dem Muster Verb-Objekt. Hier eine kleine Übersetzungstabelle als Beispiel:
ls | Get-ChildItem |
cd | Set-Location |
echo | Write-Host oder Write-Output |
cat | Get-Content |
man | Get-Help |
Diese Idee finde ich richtig gut. Die Lesbarkeit ist deutlich besser und man kann ungefähr raten, was Befehle machen werden. Andersherum funktioniert es für mich noch nicht (vielleicht aber eine Frage der Erfahrung): Wenn ich einen Befehl suche, kann ich nicht einfach raten, wie der richtige Befehl heißen könnte.
Andererseits sind die Befehle in PowerShell viel länger als unter Unix. In der Praxis muss man deshalb deutlich mehr tippen, das ist nervig in einer Repl.
Pipes funktionieren ganz anders
Pipes (|) sind das beste Feature von Shells. In zsh benutze ich sie ungefähr einmal pro Minute. In PowerShell gibt es auch Shells, aber sie funktionieren anders. Anstatt Strings werden Objekte an den nächsten Befehl weitergegeben. Manchmal macht das einen Unterschied.
Ein Standardbeispiel ist: Finde die Namen der 3 größten Dateien in einem Directory.
Das klingt eigentlich nach etwas, worin eine shell gut sein sollte. Es geht auch, aber es ist schon ein wenig frickelig. Diese Lösung habe ich mir ausgedacht:
In PowerShell ist das eleganter.
Im Prinzip passiert ja hier das gleiche, aber die PowerShell-Lösung ist lesbarer und wahrscheinlich auch stabiler.
Richtig gut
An ein paar Stellen war ich wirklich sehr angetan von der Powershell. Zum Beispiel, Text farbig ausgeben:
In einer traditionellen Shell muss man sich dafür mit ANSI-Escapecodes herumschlagen. Warum gibt es solche Flags eigentlich nicht in echo? Das ist sooo praktisch!
Richtig nervig
Am meisten ärgert mich an der PowerShell, dass die Tab-Completion unter Windows nicht gut ist. Unter Linux geht es. Ich verstehe nicht, woran das liegt.
Deshalb verwende ich PowerShell auch hauptsächlich für Skripte, nicht in der Repl.
Wie eine ordentliche Programmiersprache
PowerShell fühlt sich an vielen Stellen wie eine Programmiersprache an:
- lesbare for-Schleifen und if-Verzweigungen
- Klassen
- Exceptions
- Funktionen mit benannten Parametern (kein $1 und $2)
- Dokumentation
PowerShell ist hier näher an Python dran als an bash.
Skripte bleiben wartbar
Mit Shell-Skripten kann man alles machen, aber man sollte nicht.
Wenn sie zu lange werden, ist man gut beraten, sie in einer richtigen Programmiersprache neu zu schreiben. Was bedeutet “zu lang”? Google sagt ab 100 Zeilen - Ich persönlich finde die Grenze ist bei 10 Zeilen.
Zu meinem Erstaunen sind PowerShell-Skripte deutlich besser wartbar als Shell-Skripte. Ein paar Hundert Zeilen sind gar kein Problem (wenn man Funktionen und gute Namen verwendet).
Fazit
PowerShell ist eigentlich ziemlich cool. Es ist wartbar, einigermaßen ausdrucksstark und flexibel. Und FOSS. Und Cross-Plattform.
Insgesamt fühlt es sich an wie eine gute Mischung aus bash und Python. Ob das eine Nische ist, die gefüllt werden musste, kann jeder selbst entscheiden.
Ich finde, es lohnt sich damit mal herum zu experimentieren.
Titelbild: https://unsplash.com/de/fotos/person-mit-schwarzer-muschel-s_JFRLuCg8g
Quellen: keine
GNU/Linux.ch ist ein Community-Projekt. Bei uns kannst du nicht nur mitlesen, sondern auch selbst aktiv werden. Wir freuen uns, wenn du mit uns über die Artikel in unseren Chat-Gruppen oder im Fediverse diskutierst. Auch du selbst kannst Autor werden. Reiche uns deinen Artikelvorschlag über das Formular auf unserer Webseite ein.