Die Shells der Anderen (oder ein sehr oberflächlicher Vergleich mit Unix-Shells)

Zu Weihnachten habe ich mir mit Shell-Programmierung (von Jürgen Wolf, erschienen bei Galileo Press) ein Buch gekauft, das mit der PowerShell zunächst überhaupt nichts zu tun hat, denn der Autor stellt ausschließlich die bekannten Unix-Shells wie Korn und vor allem Bash vor.

Es ist ein sehr gutes, mit 800 Seiten vor allem sehr umfassendes Buch (der Autor bevorzugt einen recht „lockeren“ Schreibstil – an einer Stelle im Kapitel über die Fehlersuche heißt es wörtlich „Im folgenden Beispiel haben wir ein Script, welches ständig in einer Endlosschleife läuft, aber wir sind zu blind, den Fehler zu erkennen“ – so kann es natürlich auf den Punkt bringen, allerdings würde ich mich so etwas nicht trauen, wenngleich es für die anvisierte Zielgruppe eventuell der richtige Ton sein könnte).

Mich hat dass Thema bzw. Buch aus mehreren Gründen interessiert. In meinen PowerShell-Schulungen sitzen manchmal Menschen, die bereits jahrelang mit einer Unix-Shell (meistens Bash) gearbeitet haben und daher oft entsprechend skeptisch sind, wenn es um die „Segen der neuen Microsoft PowerShell“ geht, manche Gemeinsamkeiten entdecken (manchmal ein wenig nach dem Motto „Typisch Microsoft, alles wird kopiert“), aber auch Schwachstellen in der PowerShell entdecken und ich bei alledem bislang mangels Erfahrung nicht allzu viel Konstruktives beitragen konnte (das wird sich nun ändern;).

Ein (noch relativ junger) Teilnehmer hat in einem PowerShell-Kurs vor ein paar Wochen gleich mehrere „Schwachstellen“ bemängelt:

  • Die Hilfe lässt sich nicht besonders komfortabel durchsuchen.
  • Die History-Befehlliste wird mit jedem Start der PowerShell neu angelegt.
  • Die Tab-Autoverstolländigung funktioniert nicht besonders gut

Dass die PowerShell in der Version 1.0 kein Remoting ermöglicht erwähne ich bei jedem Kurs gleich am Anfang, sonst wäre diese Unterlassung auch noch auf der Liste gelandet.

Auch wenn ich mit der der Bash-Shell bislang lediglich ein wenig „herumexperimentiert“ habe (und dabei nicht allzu weit gekommen bin, da ich sie relativ schwer zugänglich finde, was aber sicher den Reiz ausmacht, siehe vi-Editor) sind mir folgende Unterschiede aufgefallen:

  • Unix-Shells wie Bash sind über viele Jahre gereift und in einem Umfeld entstanden (Unis, Forschungseinrichtungen, Behörden, dort wo die Leute oft ein wenig mehr Zeit für Kleinigkeiten haben oder wo ein hoher Studentenanteil dafür sorgt, dass Kleinigkeiten über Jahre perfektioniert und teilweise überperfektioniert werden). Die PowerShell gibt es erst seit November 2006 und damit etwas mehr als 2 Jahre. Im Vergleich zu den meisten Unix-Shells ein sehr kurzer Zeitraum.
  • Eine Unix-Shell wie Bash ist nicht gerade homogen. Sie setzt auf Betriebssystemkomponenten, andere Utilities usw. Im erwähnten Shell-Buch wird z.B. wie selbstverständlich gezeigt wie sich kleine Oberflächen erstellen lassen, was sehr nett ist, doch ist dies kein direkter Verdienst der Shell, sondern anderer Tools, die mit der Shell zunächsts nichts zu tun haben. Die PowerShell hat das .NET Framework im Hintergrund, mit dem das alles auch möglich ist, es leider nur nicht so gut integriert und vor allem im Rahmen der PowerShell dokumentiert.
  • Microsoft ist als Softwareunternehmen dafür bekannt, dass nicht alles mit dem ersten Anlauf gelingt. Auch die PowerShell 1.0 glänzt nicht in allen Bereichen durch eine überragende Benutzerfreundlichkeit. Ein weiterer „Schwachpunkt“ ist die „strategische Zwangsjacke“, in der sich auch die PowerShell befindet, und der Umstand, dass nicht alles was technisch möglich ist auch realisiert werden darf. SSH, das es bei der PowerShell von Microsoft wohl nie geben dürfte, ist dafür das beste Beispiel.
  • Microsoft war noch nie dafür bekannt, besonders intuitive „Anwenderschnittstellen“ zu schaffen. Bei der PowerShell hat man sich von Anfang sehr viel Mühe gegeben und ist dem Ziel einer „perfekten Admin-Schnittstelle“ bereits sehr nahe gekommen, aber eben nur sehr nahe.

Bei allen Kritikpunkten darf nicht vergessen werden, dass die PowerShell extrem erweiterbar ist. Praktisch alles, was am Anfang zu fehlen scheint, kann in der einen (etwa über Funktionen) oder anderen (über Cmdlets, Snapins und Provider) nachgerüstet werden. Es gibt knapp ein Dutzend solcher Erweiterungen für die Version 1.0. Und es gibt eine aktive und sehr einfallsreiche Community – die  Tab Expansion vom PowerShell Guy sollte als Beispiel genügen.

Mit der kommenden Version 2.0 wird die PowerShell enorm an Funktionalität gewinnen, ohne dass sie dadurch komplizierter oder schwerer beherrschbar wird. Die drei wichtigsten Vorteile der PowerShell sind für mich: 1. Erweiterbarkeit. 2. Die Objektpipeline. 3. Die Konsistenz und die damit einhergehende leichtere Erlernbarkeit.

Nachdem was ich aus dem Shell-Buch bereits über die Bash-Shell weiß kommt es mir so vor als würde es Jahre dauern bis man sich mit allen Feinheiten nicht nur auskennt, sondern sicher fühlt. Bei der PowerShell liegt die Einarbeitungszeit deutlich niedriger (zwischen 6 und 12 Monate für jemanden, der sich mehr oder weniger regelmäßig mit ihr beschäftigt).

Wer die PowerShell selber einmal mit Shells wie der Bash-Shell vergleichen möchte, benötigt dazu nicht unbedingt eine Linux-Installation, am einfachsten geht es mit CygWin, das eine „Unix-kompatible Umgebung“ zur Verfügung stellt, zu der unter anderem auch eine Bash-Shell gehört. Man kann sich natürlich auch eineen eeePC (mit Linux natürlich) oder gleich einen MacMini kaufen. Bei beiden ist die Bash-Shell ebenfalls mit dabei.

Eine nette Seite, die alle gängigen Shells gegenüberstellt, ist http://www.ss64.com/index.html.

Nachtrag: Ein Satz am Ende eines Artikels aus der aktuellen c’t 3/2009 zum Thema „Bash-Skripte optimieren“ lautet wörtlich: „Um effiziente Shell-Skripte schreiben zu können, benötigt man also nicht nur Kenntnisse der Bash, sondern muss auch die Stärken anderer Tools kennen und sie an der richtigen Selle einzusetzen wissen“.  Dies bestätigt indirekt meinen Vergleich. Bei der PowerShell geht es nur um die PowerShell. Das ist, um es noch einmal abzuschließen, ihre Hauptstärke.

Advertisements

Kommentar verfassen

Bitte logge dich mit einer dieser Methoden ein, um deinen Kommentar zu veröffentlichen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s