Vergleich von Unix-Shells

9

Gibt es von den wichtigsten Unix-Shells (bash, ksh, tcsh, zsh, andere?) Zwingende Gründe, sie übereinander zu verwenden?

  • Welches ist das interaktivste / befehlszeilenfreundlichste?
  • Welches ist am förderlichsten / intuitivsten für das Schreiben von Skripten?
  • Gibt es wichtige integrierte Funktionen, die eine Shell bietet, die andere nicht bieten?
  • Ist eine dieser Schalen wirklich gut für eine Art von Funktion, aber nicht für eine andere? Oder sind sie alle ziemlich rund / flexibel?
  • Ist es nur eine Frage der persönlichen Präferenz?

Ich kann dieses Community-Wiki erstellen, wenn jemand es vorzieht.

Andy White
quelle

Antworten:

17

Strom:

  • bash- Bourne erneut Shell, Standard-Shell in den meisten Linux-Distributionen. Anständige Eigenschaften;
  • zsh - die funktionsreichsten, aber immer noch selten genutzten;
  • ksh - Standard-Shell in Solaris, AIX und anderen wenigen Unices;
  • tcsh - Standard-Shell in verschiedenen * BSD-Flavour-Unices;

Historisch:

  • sh- Original Bourne Shell (veröffentlicht 1977). Durch Bash überholt;
  • csh- Original C-Schale (veröffentlicht 1978). Veraltet von tcsh und ksh;

Beachten Sie, dass bash, ksh und zsh von der sh-Syntax abgeleitet sind, während tcsh von der csh-Syntax abgeleitet ist. Dies sind zwei sehr unterschiedliche Syntaxen.

Das Feature-Diagramm (Wiki).

vartec
quelle
Die meisten Skripte sind im Allgemeinen so geschrieben, dass sie sh-kompatibel sind, da das Starten eines Skripts über sh normalerweise viel schneller als Bash ist.
Mikeage
Wie ist das? Unter Linux ist / bin / sh ein Symlink zu / bin / bash.
vartec
2
/ bin / sh ist nicht immer ein Symlink zu / bin / bash
Brad Gilbert
1
Wenn Sie bash als "sh" instanziieren, wird es in einem "sh" -Modus ausgeführt, der eine Teilmenge von bash-Befehlen unterstützt. Ich glaube, dass die "sh" -Syntax ein POSIX-Standard ist.
Duffbeer703
Unter Debian können Sie 'dash' als Ersatz für '/ bin / sh' verwenden.
Drybjed
9

Fisch ist eine neue Schale, die vielleicht interessanter ist als die anderen, nicht weil sie notwendigerweise mehr Funktionen hat, sondern weil sie standardmäßig einfach funktionieren und weil Fisch nach Benutzerfreundlichkeit strebt.

Ein paar Screenshots ( 1 , 2 , 3 , 4 ) reichen aus, um die allgemeine Vorstellung zu vermitteln.

Fisch ist jetzt die Standard-Shell auf meinem Mac bei der Arbeit. Stelle dir das vor.

Peter Hilton
quelle
2

Wenn Sie eine andere Shell als sh/ lernen möchten bash, können Sie auch einfach mit gehen zsh. Ich glaube nicht, dass jemand ernsthaft bestreitet, dass es die leistungsstärkste und funktionsreichste der alternativen Muscheln ist. ob es nur aufgebläht ist, steht natürlich noch zur Debatte.

Ich habe gute Dinge gehört fish, aber nie die Mühe gemacht, mich mit ihnen zu beschäftigen.

Die Admins, die ich kenne, betrachten cshund tcshals Greuel, die um jeden Preis vermieden werden sollten, und ich stimme ihnen zu, obwohl ich nie gezwungen war, mich durch eine der beiden Hüllen zu stecken.

Kquinn
quelle
2

Ich würde empfehlen, bash gut zu kennen, da es eines der häufigsten ist (im Allgemeinen die Linux-Standardeinstellung). Ich persönlich liebe zsh als meine interaktive Shell. Es hat großartige Vervollständigungsfunktionen. Sie können beispielsweise eine Liste von Hosts festlegen. Wenn Sie beispielsweise ssh Ser [tab] ausführen, wird versucht, einen dieser Hosts automatisch zu vervollständigen. Es hat auch rekursives Globing. Wenn Sie also alle JPEG-Dateien im aktuellen und Unterverzeichnis finden möchten, können Sie sie verwenden ls -ld **/*.jpg. Es gibt viele lustige Funktionen mit zsh (Suche nach .zshrc-Dateien von Personen), und Sie können es auf "bash-kompatibel" einstellen, so dass es einfach ist, zwischen den beiden zu wechseln. Wenn Sie dies mit GNU Screen kombinieren, wird die Arbeit mit der Befehlszeile möglicherweise zu einem Vergnügen.

Kyle Brandt
quelle
1

Vergessen Sie nicht Ihre andere Frage Häufigste Unix / Linux-Shell - die beliebteste Shell ist wahrscheinlich aus einem bestimmten Grund am beliebtesten ;-)

Für das, was es wert ist, schalten die meisten Leute nicht häufig zwischen Muscheln ab, so dass es schwierig sein wird, einen umfassenden Vergleich der verschiedenen Optionen zu erhalten. Es ist wahrscheinlicher, dass Sie verschiedene Menschen sehen, die sich für die Tugenden ihrer Lieblingsschalen einsetzen. Nach dem Wenigen, das ich über verschiedene Shells gehört habe, bieten sie alle dieselben grundlegenden Funktionen (wie E / A-Umleitung, Befehlsverlauf usw.), sodass persönliche Vorlieben wahrscheinlich eine große Komponente darstellen.

David Z.
quelle
1

Ein zwingender Grund für die Verwendung von ZSH, der nicht erwähnt wurde, ist der vi-Modus und der emacs-Modus .

Für diejenigen, die es lieben, ihr vi-Muskelgedächtnis in der Schale zu nutzen, ist dies eine Killer-Funktion.

Und für diejenigen, die Emacs bevorzugen, können Sie auch diese Tastenkombinationen verwenden, aber echte Emacs-Gläubige würden wahrscheinlich sagen, dass Emacs ihre Lieblingsschale ist.

;-);

Somantra
quelle
0

Die Präferenz für den täglichen Gebrauch ist wirklich eine Mischung aus persönlichem Geschmack. Wenn ich jedoch Skripte schreibe, versuche ich, aus Gründen der Portabilität posix-konform zu sein.

Vincent De Baere
quelle
0

Genau wie Heads Up: Ubuntu setzt standardmäßig "sh" auf "dash", was in der Vergangenheit zu einigen Problemen mit der POSIX-Kompatibilität führte. Anscheinend unterscheiden sich die Echo-Befehle geringfügig.

Imbus
quelle