C Schale

Die C-Schale (csh oder die verbesserte Version, tcsh, auf den meisten Maschinen) ist eine Schale von Unix, die von Bill Joy während ein Student im Aufbaustudium an der Universität Kaliforniens, Berkeley gegen Ende der 1970er Jahre geschaffen wurde. Es ist weit verteilt worden, mit 2BSD Ausgabe des BSD Unix System beginnend, das Joy begonnen hat, 1978 zu verteilen. Andere frühe Mitwirkende zu den Ideen oder dem Code waren Michael Ubell, Eric Allman, Mike O'Brien und Jim Kulp.

Die C-Schale ist ein Befehl-Verarbeiter es wird normalerweise in einem Textfenster geführt, dem Benutzer erlaubend, Befehle zu tippen, die Handlungen verursachen. Die C-Schale kann auch Befehle von einer Datei, genannt eine Schrift lesen. Wie alle Schalen von Unix unterstützt es Dateinamen wildcarding, Rohrleitung, hier Dokumente, Befehl-Ersatz, Variablen und Kontrollstrukturen für die Bedingungsprüfung und Wiederholung. Was die C-Schale besonders in den 1980er Jahren unterschieden hat, waren seine interaktiven Eigenschaften und gesamter Stil. Seine neuen Eigenschaften haben es leichter und schneller gemacht, um zu verwenden. Der gesamte Stil der Sprache hat mehr wie C geschaut und wurde als lesbarer gesehen.

Auf vielen Systemen wie Mac OS X und Rote Hat Linux ist csh wirklich tcsh, eine verbesserte Version von csh. Eine Datei, die das tcsh rechtskräftige enthält, hat Verbindungen dazu sowohl als "csh" als auch als "tcsh", so dass sich jeder Name auf dieselbe verbesserte Version der C-Schale bezieht.

Auf Ubuntu gibt es zwei verschiedene Pakete: csh und tcsh. Der erstere ist ein basierter auf der ursprünglichen BSD Version von csh, und der Letztere ist der verbesserte tcsh.

tcsh hat Dateinamen und Befehl-Vollziehung und Befehl-Linienredigieren-Konzepte hinzugefügt, die vom System von Tenex geliehen sind, das ist, wo der "t" hergekommen ist. Weil es nur Funktionalität hinzugefügt hat und nicht geändert hat, was dort war, ist tcsh rückwärts kompatibel mit der ursprünglichen C-Schale geblieben. Und obwohl es als ein Seitenzweig vom ursprünglichen Quellbaum angefangen hat, den Joy geschaffen hatte, ist tcsh jetzt der Hauptzweig für die andauernde Entwicklung. tcsh ist sehr stabil, aber neue Ausgaben setzen fort, grob einmal jährlich zu erscheinen, größtenteils aus geringen üblen Programmfehler-Lagen bestehend.

Designziele und Eigenschaften

Die Hauptdesignziele für die C-Schale bestanden darin, dass sie mehr der C Programmiersprache ähnlich sein sollte, und dass es für den interaktiven Gebrauch besser sein sollte.

Mehr wie C

Das Unix System war fast exklusiv in C geschrieben worden, so war das erste Ziel der C Schale eine Befehl-Sprache, die mit dem Rest des Systems mehr stilistisch im Einklang stehend war. Die Schlüsselwörter, der Gebrauch von Parenthesen und der eingebauten Ausdruck-Grammatik der C Schale und Unterstützung für die Reihe waren alle stark unter Einfluss C.

Nach heutigen Standards kann csh nicht besonders mehr C ähnlich scheinen als viele andere populäre scripting Sprachen. Aber im Laufe der 80er Jahre und der 90er Jahre wurde der Unterschied als das Anschlagen, besonders wenn im Vergleich zu sch, die dann dominierende Schale gesehen, die von Stephen Bourne an AT&T geschrieben ist. Dieses Beispiel illustriert die herkömmlicheren Ausdruck-Maschinenbediener und Syntax der C Schale.

sch Mangel gehabt eine Ausdruck-Grammatik. Eingeklammerte Bedingung des Quadrats musste durch die langsameren Mittel bewertet werden, das Außentestprogramm zu führen. sh's, wenn Befehl seine Argument-Wörter als ein neuer Befehl genommen hat, als ein Kinderprozess geführt zu werden. Wenn das Kind mit einem Nullrückcode abgegangen ist, sch dann Klausel (eine getrennte Behauptung, aber häufig schriftlich angeschlossen auf derselben Linie mit einem Strichpunkt) suchen würde und liefen, der Block verschachtelt hat. Sonst würde es sonst laufen. Harte Verbindung, die das Testprogramm sowohl als "" als auch als "" dem notational Vorteil der eckigen Klammern und des Äußeren gegeben hat, dass die Funktionalität des Tests ein Teil sch Sprache war. der Gebrauch von sh eines umgekehrten Schlüsselwortes, um das Ende eines Kontrollblocks zu kennzeichnen, war ein Stil, der vom Algol 68 geliehen ist.

Im Vergleich konnte csh den Ausdruck direkt bewerten, der ihn schneller gemacht hat. Es hat auch bessere Lesbarkeit gefordert: Seine Ausdrücke haben eine Grammatik und eine Reihe von von C größtenteils kopierten Maschinenbedienern verwendet, keines seiner Schlüsselwörter wurde umgekehrt, und der gesamte Stil ist auch mehr C ähnlich gewesen.

Hier ist ein zweites Beispiel, Schriften vergleichend, die die ersten 10 Mächte 2 berechnen.

Wieder wegen des Mangels an einer Ausdruck-Grammatik sch verwendet Schrift Befehl-Ersatz und den Expr-Befehl. Die Behauptung in der C-Schale ist ein Wortspiel: Es ist die "at-sign-ment" Behauptung.

Schließlich ist hier ein drittes Beispiel, die sich unterscheidenden Stile für eine Schalter-Behauptung zeigend.

In sch Schrift, "" kennzeichnet das Ende jedes Falls. Es ist bemerkenswert, weil sch ungültige Behauptungen sonst zurückweist.

Verbesserungen für den interaktiven Gebrauch

Das zweite Ziel bestand darin, dass die C-Schale für den interaktiven Gebrauch besser sein sollte. Zur Unterstutzung dessen hat es zahlreiche neue Eigenschaften eingeführt, die es leichter, schneller und freundlicher gemacht haben, um durch jemanden zu verwenden, an einem Terminal sitzend, Befehle tippend. Benutzer konnten Sachen mit viel weniger Anschläge machen, und es ist schneller gelaufen. Die bedeutendsten von diesen neuen Eigenschaften waren die Geschichte und die Redigieren-Mechanismen, die Decknamen, die Verzeichnisstapel, die Tilde-Notation, cdpath, die Job-Kontrolle und der Pfad hashing. Diese neuen Eigenschaften haben sich sehr populär erwiesen, und viele von ihnen sind durch andere Schalen von Unix seitdem kopiert worden.

Geschichte

:History erlaubt Benutzern, vorherige Befehle zurückzurufen und sie durch das Schreiben nur einiger schneller Anschläge zu wiederholen. Zum Beispiel, zwei Ausrufungszeichen, "" hat als ein Befehl und gekennzeichnet als "Schlag, Schlag getippt," führen Mittel den sofort vorhergehenden Befehl. Andere kurze Anschlag-Kombinationen, z.B, "" um gerade das letzte Argument des vorherigen Befehls zu bedeuten, erlauben Bit und Stücken von vorherigen Befehlen, zusammen aufgeklebt und editiert zu werden, um einen neuen Befehl zu bilden.

Editierende Maschinenbediener

:Editing kann nicht nur auf dem Text eines vorherigen Befehls, sondern auch auf variablen Ersetzungen getan werden. Die Maschinenbediener-Reihe von der einfachen Schnur sucht zur Syntaxanalyse eines pathname/ersetzt, um ein spezifisches Segment herauszuziehen.

Decknamen

:Aliases erlauben dem Benutzer zu tippen der Name eines Decknamens und die C-Schale zu haben, breiten es innerlich in beliebigen Satz von Wörtern aus, die der Benutzer definiert hat. Für viele einfache Situationen, z.B laufend, ""befehlen durch das Schreiben"" läuft es schneller und es günstiger ist als das Schaffen einer Schrift.

Verzeichnisstapel

:The-Verzeichnisstapel erlaubt dem Benutzer, das aktuelle Arbeitsverzeichnis zu stoßen oder knallen zu lassen, es leichter machend, hin und her zwischen zwei verschiedenen Plätzen im filesystem zu springen, ohne viel Schreiben tun zu müssen.

Tilde-Notation

:Tilde-Notation bietet einer Schnellschrift Weise an, pathnames hinsichtlich des Hausverzeichnisses mit dem "" Charakter anzugeben.

Interaktive Dateinamenvollziehung

:The-Flucht-Schlüssel konnte interaktiv verwendet werden, um mögliche Vollziehungen eines Dateinamens am Ende der aktuellen Befehl-Linie zu zeigen.

Cdpath

:Cdpath streckt sich aus der Begriff eines Suchwegs zu (ändern Sie Verzeichnis) Befehl: Wenn das angegebene Verzeichnis nicht im aktuellen Verzeichnis ist, wird csh versuchen, es in den cdpath Verzeichnissen zu finden.

Job-Kontrolle

:Job-Kontrolle hat das Problem gerichtet, dass, gut in die 1980er Jahre, die meisten Benutzer nur einfache Terminals der Charakter-Weise hatten. Unter sch konnte ein Benutzer nur eine Sache auf einmal machen. Ein Benutzer, der angefangen hat, eine Datei zu editieren, musste beenden oder mindestens seine Arbeit sparen und vor dem Tun von irgend etwas anderem herauskommen. Ein Benutzer konnte ein anderes Fenster nicht einfach öffnen. Die Job-Kontrolle der C Schale hat das gelöst, indem sie dem Benutzer erlaubt worden ist, die aktuelle Tätigkeit aufzuheben und ein neues Beispiel der C-Schale, genannt einen Job durch das Schreiben zu schaffen. Der Benutzer konnte dann hin und her zwischen Jobs mit dem Befehl umschalten. Wie man sagte, war der aktive Job im Vordergrund. Wie man sagte, wurden andere Jobs entweder aufgehoben hat (angehalten) oder im Vordergrund laufend.

Pfad hashing

:Path hashing beschleunigt die Suche der C Schale nach rechtskräftigen Dateien. Anstatt filesystem zu tun, ruft jedes Pfad-Verzeichnis, einer nach dem anderen, bis dazu herbei entweder findet die Datei oder wird an Möglichkeiten knapp, die C-Schale befragt eine innere gebaute Hash-Tabelle durch die Abtastung der Pfad-Verzeichnisse. Dieser Tisch kann gewöhnlich die C-Schale erzählen, wo man die Datei findet, wenn es besteht, ohne suchen zu müssen, und mit dem "Aufgewärmt"-Befehl erfrischt werden kann.

Übersicht der Sprache

Die C-Schale bedient Linie auf einmal. Jede Linie ist tokenized in eine Reihe von Wörtern, die durch Räume oder andere Charaktere mit der speziellen Bedeutung, einschließlich Parenthesen, der Rohrleitung und i/o Wiederrichtungsmaschinenbediener und des Strichpunkts oder Und-Zeichens getrennt ist.

Grundlegende Behauptungen

Eine grundlegende Behauptung ist diejenige, die einfach einen Befehl führt. Das erste Wort wird als Name des Befehls genommen, geführt zu werden, und kann entweder ein innerer Befehl, z.B, "," oder ein Außenbefehl sein. Der Rest der Wörter wird als Argumente für den Befehl passiert.

Am grundlegenden Behauptungsniveau sind hier einige der Eigenschaften der Grammatik:

Wildcarding

:The C Schale, wie alle Schalen von Unix, Wildcards irgendwelche Argumente der Befehl-Linie. Wenn ein Wort Wildcard-Charaktere enthält, wird es als ein Muster genommen und durch die Liste aller Dateinamen dieses Match ersetzt.

:: Matchs jede Zahl von Charakteren.

:: Matchs jeder einzelne Charakter.

::... Matchs einige der Charaktere innerhalb der eckigen Klammern. Reihen wird mit dem Bindestrich erlaubt.

::... Matchs jeder Charakter nicht im Satz.

:The C Schale hat auch mehrere notational Bequemlichkeiten, da kopiert, durch andere Schalen von Unix eingeführt.

:: abcdefghi ist Wechsel und breitet sich zu abcdef und abcghi aus.

:: bedeutet das Hausverzeichnis des aktuellen Benutzers.

:: Benutzer hat das Hausverzeichnis des Benutzers vor.

:Multiple-Verzeichnisniveau-Wildcards, z.B, "", werden unterstützt.

:Having die Schale tut wildcarding, war eine wichtige Entscheidung über Unix. Es hat bedeutet, dass wildcarding immer mit jedem Befehl arbeiten würde, würde es immer derselbe Weg arbeiten, und nur die Schale würde codieren müssen, um es zu tun. Aber die Entscheidung hat von der Tatsache abgehangen, dass Unix sehr lange Argument-Listen sehr effizient durch den exec Systemanruf dass Csh-Gebrauch passieren konnte, um Kinderprozesse zu schaffen. Im Vergleich, wenn auch modernes Windows Befehl-Linien bis zu grob 32K Charaktere von Unicode passieren kann, wird wildcarding durch jede Anwendung herkömmlich getan (durch den C Laufzeitcode, bevor angerufen wird) wegen seines MS-DOS-Erbes: MS-DOS hat nur einer 128-Byte-Befehl-Linie erlaubt, zu einer Anwendung passiert zu werden, wildcarding durch den DOS-Befehl schnell unpraktisch machend.

Eingabe/Ausgabe-Wiederrichtung

:By-Verzug, wenn csh einen Befehl, der Befehl führt, erbt die stdio Dateigriffe des csh für stdin, stdout und stderr, der normalerweise der ganze Punkt zum Konsolfenster, wohin die C-Schale läuft. Die i/o Wiederrichtungsmaschinenbediener erlauben dem Befehl, eine Datei stattdessen für den Eingang oder die Produktion zu verwenden.

:: Datei bedeutet, dass stdout der Datei geschrieben wird, sie überschreibend, wenn sie, und das Schaffen davon besteht, wenn sie nicht tut. Fehler kommen noch zum Schale-Fenster.

:: Datei bedeutet sowohl stdout als auch stderr wird der Datei geschrieben, es überschreibend, wenn es, und das Schaffen davon besteht, wenn es nicht tut.

:: Datei bedeutet, dass stdout am Ende der Datei angehangen wird.

:: Dateimittel sowohl stdout als auch stderr werden am Ende der Datei angehangen.

::

::

Das Verbinden

:Commands kann auf derselben Linie angeschlossen werden.

:: Mittel führen den ersten Befehl und dann das folgende.

:: Mittel führen den ersten Befehl und, wenn er mit einem 0 Rückcode erfolgreich ist, führen Sie das folgende.

:: Mittel führen den ersten Befehl und, wenn er mit einem Nichtnullrückcode scheitert, führen Sie das folgende.

Rohrleitung

:Commands kann zusammen mit Pfeifen verbunden werden, der die Produktion eines Befehls veranlasst, in den Eingang des folgenden gefüttert zu werden. Beide Befehle laufen gleichzeitig.

:: Mittel verbinden stdout mit stdin des folgenden Befehls. Fehler kommen noch zum Schale-Fenster.

:: Mittel verbinden sowohl stdout als auch stderr zu stdin des folgenden Befehls.

Variabler Ersatz

:If ein Wort enthält ein Dollarzeichen, "", werden die folgenden Charaktere als der Name einer Variable und der Verweisung genommen, wird durch den Wert dieser Variable ersetzt. Verschiedene Redigieren-Maschinenbediener, getippt als Nachsilben zur Verweisung, erlauben pathname, der (z.B, zum Extrakt gerade die Erweiterung) und andere Operationen editiert.

Bezug und das Entgehen

:Quoting-Mechanismen erlauben sonst speziellen Charakteren, z.B, whitespace, Wildcards, Parenthesen, Dollarzeichen, usw. als wörtlicher Text genommen zu werden.

:: Mittel nehmen den folgenden Charakter als ein gewöhnlicher wörtlicher Charakter.

:: Schnur ist ein schwaches Zitat. Eingeschlossener whitespace und Wildcards werden als Druckfehler genommen, aber Variable und Befehl-Ersetzungen werden noch durchgeführt.

:: Schnur ist ein starkes Zitat. Die komplette beiliegende Schnur wird als ein Druckfehler genommen.

Befehl-Ersatz

:Command-Ersatz erlaubt der Produktion eines Befehls, als Argumente für einen anderen verwendet zu werden.

:: Befehl-Mittel nehmen die Produktion des Befehls, analysieren es in Wörter grammatisch und kleben sie zurück in die Befehl-Linie auf.

Hintergrundausführung

:Normally, wenn die C-Schale einen Befehl anfängt, wartet sie auf den Befehl, vor dem Geben des Benutzers eine andere schnelle Nachrichtenübermittlung zu beenden, dass ein neuer Befehl getippt werden kann.

:: befehlen Sie Mittel-Anfang-Befehl im Vordergrund und schnell sofort für einen neuen Befehl.

Subschalen

:A-Subschale ist eine getrennte Kinderkopie der Schale, die den aktuellen Staat erbt, aber dann Änderungen z.B zum aktuellen Verzeichnis vornehmen kann, ohne den Elternteil zu betreffen.

:: Befehle bedeuten geführte Befehle in einer Subschale.

Kontrollstrukturen

Die C-Schale stellt Kontrollstrukturen sowohl für die Bedingungsprüfung als auch für Wiederholung zur Verfügung. Die Bedingung prüfenden Kontrollstrukturen sind wenn und Schalter-Behauptungen. Die Wiederholungskontrollstrukturen sind während, foreach und mehrmalige Behauptungen.

wenn Behauptung

:There sind zwei Formen wenn Behauptung. Die kurze Form wird auf einer einzelnen Linie getippt und aber kann nur einen einzelnen Befehl angeben, wenn der Ausdruck wahr ist.

:: wenn (Ausdruck) Befehl

:The bilden lange Gebrauch dann, sonst und endif Schlüsselwörter, um Blöcke von Befehlen zu berücksichtigen, innerhalb der Bedingung verschachtelt zu werden.

:: wenn (expression1) dann

::: Befehle

:: sonst, wenn (expression2) dann

::: Befehle

::...

:: sonst

::: Befehle

:: endif

:If sonst, und wenn Schlüsselwörter auf derselben Linie, csh Ketten erscheinen, aber nicht sie verschachteln; der Block wird mit einem einzelnen endif begrenzt.

Schalter-Behauptung

:The-Schalter-Behauptung vergleicht eine Schnur gegen eine Liste von Mustern, die Wildcard-Charaktere enthalten können. Wenn nichts, die Verzug-Handlung zusammenpasst, wenn es ein gibt, wird genommen.

:: Schalter (Schnur)

::: Fall pattern1:

:::: Befehle

:::: breaksw

::: Fall pattern2:

:::: Befehle:::: breaksw

:::...

::: Verzug:

:::: Befehle:::: breaksw

:: endsw

während Behauptung

:The, während Behauptung einen Ausdruck bewertet. Wenn es wahr ist, führt es die verschachtelten Befehle und wiederholt sich dann.

:: während (Ausdruck)

::: Befehle

:: Ende

Foreach-Behauptung

:The foreach Behauptung nimmt eine Liste von Werten, gewöhnlich eine Liste von Dateinamen, die durch wildcarding, und dann für jeden erzeugt sind, setzt die Schleife-Variable auf diesen Wert und führt die verschachtelten Befehle.

:: Foreach-Schleife-Variable (Liste der Werte)

::: Befehle:: Ende

wiederholen Sie Behauptung

:The-Wiederholungsbehauptung wiederholt einen einzelnen Befehl eine Zahl der ganzen Zahl von Zeiten.

:: wiederholen Sie, dass ganze Zahl befiehlt

Variablen

Die C-Schale führt sowohl Schale als auch Umgebungsvariablen durch. Umgebungsvariablen, das geschaffene Verwenden der setenv Behauptung, sind immer einfache Schnuren, die zu irgendwelchen Kinderprozessen passiert sind, die diese Variablen über das Argument dafür wiederbekommen.

Variablen von Shell, das geschaffene Verwenden des Satzes oder Behauptungen, sind zur C-Schale inner. Sie werden zu Kinderprozessen nicht passiert. Variablen von Shell können entweder einfache Schnuren oder Reihe von Schnuren sein. Einige der Schale-Variablen werden vorherbestimmt und verwendet, um verschiedene innere C-Schale-Optionen z.B zu kontrollieren, was geschehen sollte, wenn eine Wildcard scheitert, irgendetwas zu vergleichen.

In jetzigen Versionen von csh können Schnuren von der willkürlichen Länge gut in Millionen von Charakteren sein.

Ausdrücke

Die C-Schale führt eine 32-Bit-Ausdruck-Grammatik der ganzen Zahl mit Maschinenbedienern durch, die von C, aber mit einigen zusätzlichen Maschinenbedienern für Schnur-Vergleiche und Filesystem-Tests geliehen sind, z.B für die Existenz einer Datei prüfend. Maschinenbediener müssen durch whitespace von ihrem operands getrennt werden. In Variablen wird als Name Verweise angebracht.

Maschinenbediener-Priorität wird auch von C, aber mit dem verschiedenen Maschinenbediener associativity Regeln geliehen, die Zweideutigkeit dessen aufzulösen, was zuerst in einer Folge von gleichen Prioritätsmaschinenbedienern kommt. In C ist der associativity für die meisten Maschinenbediener zum Recht nach links; in der C-Schale ist es Recht-zu-link. Zum Beispiel,

Die Parenthesen im C-Schale-Beispiel sollen vermeiden, gegen die Bit auswechselnden Maschinenbediener als Eingabe/Ausgabe-Wiederrichtungsmaschinenbediener verwirrend. Auf jeder Sprache können Parenthesen immer verwendet werden, um die gewünschte Ordnung der Einschätzung, selbst wenn nur für die Klarheit ausführlich anzugeben.

Kritik

Obwohl populär, für den interaktiven Gebrauch wegen seiner vieler innovativen Eigenschaften ist csh nie so für scripting populär gewesen. Am Anfang, und im Laufe der 1980er Jahre, wie man versichern konnte, ist csh auf allen Systemen von Unix nicht da gewesen. sch gekonnt, hat der es eine bessere Wahl für irgendwelche Schriften gemacht hat, die auf anderen Maschinen könnten laufen müssen. Durch die Mitte der 1990er Jahre war csh weit verfügbar, aber der Gebrauch von csh für scripting hat neue Kritik durch das POSIX Komitee geübt, das angegeben hat, dass es nur dasjenige bevorzugte Schale sowohl zu interaktiven als auch zu scripting Zwecken geben sollte, und dass dieser bevorzugte Schale der Korn Shell sein sollte. C schälen auch geübte Kritik von anderen über die angeblichen Defekte der C Schale in der Syntax, Eigenschaften und schlechte Durchführung verpassend.

Syntax-Defekte waren allgemein einfache, aber unnötige Widersprüchlichkeiten in der Definition der Sprache. Zum Beispiel, und Befehle haben alle grundsätzlich dieselbe Sache nämlich gemacht, vereinigen Sie einen Namen mit einer Schnur oder Satz von Wörtern. Aber alle drei hatten geringe aber völlig unnötige Unterschiede. Ein gleiches Zeichen war für a, aber nicht für erforderlich oder; Parenthesen waren um eine Wortliste für a, aber nicht für und usw. erforderlich. Ähnlich, und die sich schlingenden Konstruktionen verwenden unnötig verschiedene Schlüsselwörter (und), um die verschachtelten Blöcke zu begrenzen.

Die Vermissten von meistens zitierten Eigenschaften sind der Mangel an der Fähigkeit, die stdio Dateigriffe unabhängig und Unterstützung für Funktionen zu manipulieren. Wohingegen Bach-Schale-Funktionen nur an lokalen Variablen, den Decknamen von Csh Mangel gehabt haben - wurde die nächste Entsprechung in Csh zu Funktionen - auf einzelne Linien des Codes trotz der meisten Fluss-Kontrollkonstruktionen eingeschränkt, die newlines verlangen, um anerkannt zu werden. Infolgedessen konnten Schriften von Csh nicht funktionell gebrochen werden, wie C Programme selbst sein konnte, und größere Projekte dazu geneigt haben, sich entweder zu Bach-Schale-scripting oder zu C-Code stattdessen zu bewegen.

Die Durchführung, die einen Ad-Hoc-parser verwendet hat, hat die ernsteste Kritik gezogen. Bis zum Anfang der 1970er Jahre war Bearbeiter-Technologie genug reif, dass neueste Sprachdurchführungen entweder einen verfeinernden oder von unten nach oben parser fähig dazu verwendet haben, eine völlig rekursive Grammatik anzuerkennen. Es ist nicht bekannt, warum ein Ad-Hoc-Design stattdessen für die C-Schale gewählt wurde. Es kann einfach sein, dass, wie Joy in einem Interview 2009, "Gesagt hat, als ich angefangen habe, dieses Zeug mit Unix zu tun, ich nicht ein sehr guter Programmierer war." Aber diese Wahl eines Ad-Hoc-Designs hat bedeutet, dass die C-Schale-Sprache nicht völlig rekursiv war. Es gab eine Grenze dazu, wie kompliziert ein Befehl es behandeln konnte.

Es hat für die meisten Dinge Benutzer getippt interaktiv gearbeitet, aber auf den komplizierteren Befehlen könnte ein Benutzer Zeit brauchen, um in einer Schrift zu schreiben, es hat gut nicht gearbeitet und konnte leicht scheitern, nur eine rätselhafte Fehlermeldung oder ein unwillkommenes Ergebnis erzeugend. Zum Beispiel konnte die C-Schale nicht Rohrleitung zwischen Kontrollstrukturen unterstützen. Als sie zur Pfeife versucht hat, hat die Produktion eines Befehls darin einfach nicht gearbeitet. (Die Arbeit - ringsherum, der für viele der mit dem parser verbundenen Beschwerden arbeitet, soll den Code in getrennte Schriften zerbrechen. Wenn bewegt zu einer getrennten Schrift zu sein, Rohrleitung arbeitet, weil Schriften durch das Gabeln einer neuen Kopie von csh geführt werden, der wirklich die richtigen Stdio-Griffe erbt.)

Ein anderes Beispiel ist das unwillkommene Verhalten in den folgenden Bruchstücken. Beide von diesen scheinen zu bedeuten, "Wenn 'myfile' nicht besteht, schaffen Sie ihn, indem Sie 'mytext' darin schreiben." Aber die Version schafft rechts immer eine leere Datei, weil die Ordnung der C Schale der Einschätzung ist, zu suchen und Eingabe/Ausgabe-Wiederrichtungsmaschinenbediener auf jeder Befehl-Linie zu bewerten, weil es es, vor dem Überprüfen des Rests der Linie liest, um zu sehen, ob eine Kontrollstruktur enthält.

Die Durchführung wird auch für seine notorisch schlechten Fehlermeldungen z.B kritisiert, "0 Ereignis nicht hat gefunden", der keine Information darüber nachgibt, wie das Problem ist.

Einfluss

Die C-Schale war im Einführen einer Vielzahl von Ideen einschließlich des Geschichtsmechanismus, der Decknamen, der Tilde-Notation, der interaktiven Dateinamenvollziehung, eine Ausdruck-Grammatik äußerst erfolgreich, die in die Schale usw. eingebaut ist, die durch andere Schalen von Unix seitdem kopiert worden sind. Aber im Gegensatz zu sch, der eine Vielzahl von unabhängig entwickelten Klonen, einschließlich ksh und heftigen Schlags erzeugt hat, sind nur zwei Csh-Klone bekannt. (tcsh wird als kein Klon von csh betrachtet, weil er nicht unabhängig entwickelt wurde. tcsh hat auf demselben Code basiert, der ursprünglich von Bill Joy und nur Komfortmerkmalen geschrieben ist.)

1986 hat Allen Holub Auf dem Befehl geschrieben: Unix ähnlichem Shell für das MS-DOS, ein Buch schreibend, das ein Programm beschreibt, das er genannt "SCH" geschrieben hatte, aber das tatsächlich das Sprachdesign und die Eigenschaften von csh nicht sch kopiert hat. Dazugehörige Disketten, die volle Quelle für SCH und für einen grundlegenden Satz von Unix ähnlichen Dienstprogrammen (Katze, Bedienungsfeld, grep, usw.) enthalten, waren für 25 $ und 30 $ beziehungsweise vom Herausgeber verfügbar. Die Kontrollstrukturen, die Ausdruck-Grammatik, der Geschichtsmechanismus und die anderen Eigenschaften in Holub waren SCH zu denjenigen der C-Schale identisch.

1988 haben Laboratorien von Hamilton begonnen, Schale von Hamilton C für OS/2 zu verladen. 1992 wurde Schale von Hamilton C für Windows NT veröffentlicht. Die Windows-Version setzt fort, aktiv unterstützt zu werden, aber die OS/2 Version wurde 2003 unterbrochen. Schale von Hamilton C wurde von Nicole Hamilton geschrieben und schließt sowohl einen Csh-Klon als auch eine Reihe Unix ähnlicher Dienstprogramme ein. Eine frühe schnelle Verweisung hat die Absicht als "voller Gehorsam der kompletten C-Schale-Sprache (außer der Job-Kontrolle)", aber mit Verbesserungen zum Sprachdesign und Anpassung an die Unterschiede zwischen Unix und einem PC beschrieben. Die wichtigste Verbesserung war ein verfeinernder parser, der Kontrollstrukturen erlaubt hat, verschachtelt zu werden, oder piped, etwas, was die ursprüngliche C-Schale in Anbetracht seines Ad-Hoc-parser nicht unterstützen konnte. Hamilton hat auch neue Spracheigenschaften einschließlich eingebauter und benutzerbestimmter Verfahren, Block-strukturierter lokaler Variablen hinzugefügt und Punkt-Arithmetik schwimmen lassend. Die Anpassung an einen PC hat Unterstützung für den Dateinamen und die andere Vereinbarung auf einem PC und dem Gebrauch von Fäden statt der Gabel eingeschlossen (der entweder unter OS/2 oder unter Windows nicht verfügbar war), Parallelismus, z.B, in der Aufstellung einer Rohrleitung zu erreichen.

C Schale ist gewesen, und setzt fort, die dominierende scripting Sprache in viel von der Spracherkennungsforschungsgemeinschaft zu sein, und wird mit den HTK Rede-Werkzeugen nah vereinigt.

Siehe auch

  • Dolmetscher der Befehl-Linie
  • Der Vergleich des Befehls schält

Weiterführende Literatur

Außenverbindungen


Limu (Mythologie von Tongan) / Marama (Mythologie)
Impressum & Datenschutz