[Seminar - Unix-Shells, Environments] [Douglas Kline - Harvard University] [Dies ist CS50. - CS50.TV] Das heutige Thema ist die Unix-Shell. Ich bin Douglas Kline, Experte, oder zumindest einigermaßen kompetenten Benutzer, von der Schale. Eine Schale ist die Schnittstelle für den Benutzer, um das Betriebssystem des Computers. Der Name ist irreführend, da, im Gegensatz zu einem Tier Schale, welche Fest und Schutz ist, erlaubt die Kommunikation der Computer-Shell. So poröse Membran wäre wahrscheinlich eine bessere Metapher sein. Die ursprüngliche Shell für Unix ist die Bourne-Shell. Bourne wird Dinkel B-O-U-R-N-E. Bourne war einer der ursprünglichen Autoren von Unix, und so wird die Schale nach ihm benannt. Der Name dieser Shell als Befehl ist einfach nur sh. Das ist der Befehl, den Sie ausführen können. Die Schale beginnt bei der Anmeldung. Wenn Sie sich an den Computer an, startet die Shell läuft nur für Sie, und das ist, was nimmt Ihre Befehle. Es kann auch zu anderen Zeiten zu starten. Wenn Sie ein Fenster mit keinem anderen Anzeige zu bringen, wird es für Sie eine Shell starten. Das ist, wie es ist, dass man zu einem Fenster und starten Sie Befehle und so weiter gibt, obwohl Sie sich nicht bei diesem Fenster. Darüber hinaus, wenn Sie eine Remote-Login, dann wird es eine Shell auf dem Remote-Computer zu starten. Und es ist möglich, Befehle ohne eine interaktive Shell ausgeführt. Das kann im aktuellen Betrieb bedeuten, und es kann auch bedeuten, eine Remote-Betrieb. Sie können einen Befehl an einen anderen Computer, umfasst die Inbetriebnahme einer Schale da. In der Tat hat es die Gründung eines Shell dort zu schließen auch wenn das nicht Ihr Endzweck. Wenn etwas startet wie dieser, ist es nicht unbedingt eine neue Shell starten. Wenn Sie ein neues Fenster zu bringen, ist es möglich, es zu sagen, bis in einem Editor zu bringen oder einen anderen Befehl. In diesem Fall wird der Editor von Grund auf neu zu beginnen. Wenn der Editor beendet, endet das Fenster. Dies ist ein wenig ungewöhnlich, aber es kann getan werden. In diesen Fällen wird es nicht eine Schale sein. Also es ist nicht unbedingt der Fall, dass ein Fenster oder eine solche Anwendung öffnet sich eine Shell. Shell-Befehle analysiert. Parsing bedeutet die Identifizierung der verschiedenen Elemente und klassifiziert sie. In einem Befehl, die komplette Zeichenfolge, die Sie eingeben, Es werden 1 oder mehr einzelne Befehle ausgeführt werden können. Andere Elemente können Argumente sein. Es können auch Sonderzeichen, die die Ausführung eines Befehls zu beeinflussen. Sie können die Ausgabe in einem anderen als den Bildschirm zu senden wenn der Befehl würde normalerweise schicken Sie es auf den Bildschirm. Es kann Eingang umzuleiten, sie kann auch andere Dinge zu tun. Es gibt verschiedene andere Symbole, Zeichen, und so weiter. Parsing beinhaltet Bestimmung und Interpretation der diese Dinge. Nun, wenn es keine Fragen mehr, was eher wahrscheinlich ist, da gibt es keine Menschen mehr, werden wir zu meinem nächsten Seite hier weitergehen. Ich sagte vorhin, die Bourne-Shell ist die erste Shell. Es gibt andere. Eine davon ist die C-Shell. Der Befehl ist csh. Der Name C-Shell ist nur ein Spiel mit Worten. Diese Schale wurde mit Berkeley-Unix in der Mitte der 1970er Jahre eingeführt. Berkeley Unix war ein wegweisendes Ereignis in der Entwicklung von Unix. Es war eine große Revolution und unter anderem die Einführung dieser Schale. Der Grund für dieses Wortspiel, C-Shell, ist, dass die C-Shell hat einige Eigenschaften, die sie in der C-Sprache ähnelt, der die Bourne-Shell nicht - oder sie nicht über zu diesem Zeitpunkt. Es gibt auch die TC-Shell. Dies ist eine Obermenge der C-Shell. Es verfügt über zusätzliche Funktionen, von denen viele nützlich für die interaktive Nutzung sind, wie unter Hinweis auf Befehle in der History-Mechanismus, was ich etwas später zu beschreiben - in einfacher Weise nach einem Editor modelliert. Es hat auch Bindungen, die Sie um eine kurze Schlüsselzeichenfolge zu einer längeren Befehl zu binden. Wir gehen nicht zu bekommen sein, dass heute in. Es hat einige Funktionen, die nützlich sind für die Programmierung. Doch die C-Shell ist nicht oft für Shell-Programmierung verwendet. Shell-Programme, wenn Sie nicht schon wissen, sind Programme, die von Shell-Eigenschaften bestehen. Sie könnten diese als Programme auszuführen. Sie schreiben eine Reihe von Shell-Kommandos in eine Datei und die Datei ausführen. Sie brauchen nicht, es zu kompilieren. Dies ist eine interpretierende Sprache. Der Ausdruck C-Shell ist jetzt zweideutig, da sie nur auf die ursprüngliche C-Shell, csh beziehen könnte, oder an alle C-Schalen, einschließlich tcsh. Es ist ein wenig zweideutig. Eine spätere Shell ist die Korn-Shell ksh, nach der Programmierer namens Korn. Diese Shell versucht, in ein Shell integrieren die Vorteile der C-Shell für interaktive Benutzung und die Bourne-Shell für die Programmierung. Eine Minderheit - hat als interaktive Schale von einigen Leuten verwendet. Später gab es allerdings eine weitere Einführung, die Bash-Shell, BASH, wieder ein Wortspiel, die Bourne-again shell. Es ist eine Erweiterung der Bourne-Shell. Korn-Shell ist auch. Beide sind. Es hat die gleichen Ziele der Korn-Shell von der Zusammenlegung der C-Shell Bourne-Shell und die Vorteile in der 1-Shell. Viele der Verbesserungen der Korn-Shell sind auch in Bash enthalten. Schlag, hat jedoch mehr und ist daher bevorzugt. Die Bourne-again shell und die Korn-Shell Bourne-artige Shells genannt denn sie gehören der Bourne-Shell Eigenschaften, die in mancher Hinsicht mit C Schalen kompatibel sind. Es gibt neben den anderen Shells, einige für eingeschränkten Gebrauch bestimmt sind, vielleicht auf einige Befehle begrenzt, vielleicht spezielle Zwecke, nicht oft verwendet. Ok. Nächster Artikel hier. Die Bash-Shell hat sich mit verschiedenen Formen von Linux verbunden. Ich bin mir nicht sicher, ob das stimmt, von jeder Form. Es gibt viele Formen gibt, und ich habe sie alle nicht genutzt, aber in denen, die ich verwendet habe, es hat sich mit ihm verbunden. So weit ich weiß, gibt es nichts über Bash die es nicht mehr kompatibel mit Linux macht als jede andere Kombination von Hülle und Betriebssystem. Ich denke, das spiegelt wahrscheinlich nur die Neigungen der Programmierer. Dass es sich mit Linux verbunden ist, ist ein weiterer Grund, lieber zu Bash ksh da die Dinge sind wahrscheinlich in sie geschrieben werden und es ist wahrscheinlich, sich auszubreiten. Ich werde Sie, dass andere Gründe für später geben. Bourne-Shell-Skripte sollten unter dem Korn-Shell oder Bash laufen. Wenn Sie etwas für die Bourne-Shell zu schreiben, Sie können sich wahrscheinlich führen Sie es unter ksh oder bash. Korn-Shell-Skripte werden wahrscheinlich unter Bash laufen, aber ich kann nicht garantieren, dass. Später hier sollte C-Shell-Skripte unter der TC-Shell ausgeführt. Die C-Shell wurde eigentlich nie ausgiebig für Scripting verwendet seit der Bourne-Shell und später waren die Bourne-artige Shells bevorzugt für diesen Zweck. Also das ist wirklich nicht so wichtig. Es gibt eine ganze Menge von der Bourne-Shell-Skripte, die vor langer Zeit geschrieben wurden, vor der Korn-Shell oder der Bourne-Shell wieder eingeführt wurden. Diese sind immer noch in Gebrauch, ein Teil des Betriebssystems, und so werden Sie sie finden, wenn Sie in das Betriebssystem aussehen oder einige alte Programmpakete. Bash ist zu einem gewissen Grad zu einer Art lingua franca für Betriebssysteme. Es ist bereits für Windows und VMS erweitert. VMS, falls Sie es nicht wissen, ist ein proprietäres Betriebssystem der Digital Equipment Corporation, die immer noch in Betrieb ist, im Wesentlichen hinter den Kulissen. Und wenn es geht, auf mehreren verschiedenen Betriebssystemen ausgeführt werden, wahrscheinlich die Menschen neigen dazu, für sie zu verschieben. Aber diese Entwicklung ist relativ neu. Es ist erst am Anfang, so kann ich nicht vorhersagen, ob dies wird sich herausstellen, um wirklich diese Art von Verkehrssprache sein. Auch, weil Dateipfadnamen und Bibliotheken unterscheiden zwischen diesen unterschiedlichen Betriebssystemen, Sie nicht in der Lage, ein Bash-Skript auf einem Betriebssystem zu schreiben sein könnte und führen Sie es auf einem anderen. Sie sollten es zwischen verschiedenen Unix, Linux zu bewegen Mac OS-Betriebssysteme, aber nicht notwendigerweise, Windows oder VMS. Möglicherweise müssen Sie Dateipfadnamen Beschreibungen zu ändern, und einige Bibliotheken könnte anders sein, , welche die Art und Weise, dass einige Befehle funktionieren beeinflussen können oder wie sie zu verarbeiten Argumente und dergleichen. Darüber hinaus ist ein weiterer Vorsicht hier, dass es keine Garantie dass all die verschiedenen Schalen die ich erwähnt habe - Bourne-Shell, C-Shell, TC-Shell, Korn-Shell, die Bourne-again shell - unter jedem Unix verfügbar sein oder Linux-oder Mac OS-Computer. Sie könnten einfach nicht da sein. Das ist eine der Vorkehrungen, die hier. Es ist eine bedauerliche Einschränkung hier seit Sie möchten, die Dinge, überall zu arbeiten, aber leider kann man nicht darauf verlassen. Ok. Weiter hier. Lassen Sie uns sagen, dass Sie ein Shell-Skript schreiben wollen, ein Programm, bestehend aus Shell-Befehle. Sie schreiben Ihre Befehle, steckte sie in einer Datei und die Datei ausführen. Was ist, wenn Sie Argumente einschließen möchten? Im Fall der Shell-Operationen werden Argumente Parameter oder Positionsparameter genannt und sie werden von einem Dollarzeichen und die Zahl, $ 1, $ 2 bezeichnet werden. Also, wenn das Skript hat diesen Namen, vielleicht meine erste Argument ein Argument sein und meine zweite Argument vielleicht 2, und in meinem Skript, wenn ich auf diese Dinge beziehen - Lassen Sie uns diese zu löschen, da ich nicht wirklich, um sie auszuführen - in meinem Skript, das ich vielleicht 1 Dollar haben, um sich auf arg1, $ 2, die kommen wird, dass die Art und Weise, arg2. Also diese Symbole stehen zur Verfügung, um auf die Argumente beziehen, und diejenigen, gelten für alle der Schalen. Darüber hinaus gibt es andere Zeichen. $ * Bezieht sich auf die gesamte Liste der Argumente, alle von ihnen. $ # Bezieht sich auf die Anzahl von Argumenten. Wiederum gilt dies für alle Schalen. Diese Symbole * und # können mit diesen Bedeutungen in andere Orte verwendet werden. Wir werden nicht immer in die. Shell-Bezeichner Linie. Was ist das? Angenommen, Sie haben ein Skript geschrieben haben, und es ist für eine bestimmte Schale und Sie es ausführen möchten. Woher wissen Sie, was berappen Ihr Betriebssystem zu verwenden, um Ihr Skript laufen? An einer Stelle konnte man davon ausgehen, dass sie es in der Bourne-Shell laufen wenn man nicht anders sagen, aber die Leute sind nicht Skripte in der Bourne-Shell, die viel mehr zu schreiben und man kann nicht einmal mehr darauf verlassen. Hier haben wir also eine Shell-Bezeichner Linie hier richtig. Das gibt Bash. Beachten Sie, dass es gibt es in den Pfadnamen / bin / bash. Wenn ein Computer die Bash-Shell, aber nicht in das Verzeichnis bin, / bin, das wird nicht funktionieren. Das ist ein weiterer Qualifi, ein weiterer Vorsicht hier. Die Raute ist die Kommentarzeile Charakter. Das gilt für alle Muscheln. Der besondere Fall hier, #! zu Beginn eines Skripts ist ein Sonderfall. Das gibt die Hülle, in der das Skript ausführen. Wie ich schon sagte, ist es vielleicht nicht der gleiche Ort / bin sein. Darüber hinaus gibt es eine andere Sache hier. Wenn Sie nur die Pfund-Zeichen verwenden, ohne Ausrufezeichen und Pfadnamen, das sollte zeigen eine C-Shell. Allerdings glaube ich nicht empfehlen, tun das, weil ich bin nicht in der Lage zu garantieren, dass diese immer funktionieren wird. Wenn Sie ein C-Shell wollen, wäre es besser zu sagen. Dann gibt es etwas ziemlich verwirrend hier. Wenn Sie ein Shell-Bezeichner Leitung zB / bin / bash und das Oberteil ist hier nicht verfügbar es gibt nicht so etwas wie / bin / bash auf diesem Computer, entweder, weil sie nicht über Bash oder weil es an einem anderen Ort, Sie eine Fehlermeldung sagt Ihnen, dass Sie das Skript lief nicht existiert zu bekommen. Und natürlich das Skript existiert, so dass Fehlermeldung ist verwirrend. Der Grund, dass das Betriebssystem gibt Ihnen diese Fehler oder, genauer gesagt, dass Ihre interaktive Shell, in denen Sie aktiv sind dies gibt, dass Fehler, ist, dass es den Befehl verwendet werden, die den Namen des Skripts ist berichtet. Dieser Befehl effektiv bezeichnet die Shell durch den Namen des Skripts. Das ist, wo Sie diese verwirrende Fehlermeldung. Eine weitere Möglichkeit, Shell-Skript aufrufen ist durch die Angabe der Shell auf der Kommandozeile, wie hier. Dies ist ein Befehl. Das sagt Bash laufen und führen Sie dann mein Skript in Bash. Das wird Vorrang vor einem Bezeichner Linie zu nehmen, und dies hat die Funktion der so dass Sie für unterschiedliche Pfadnamen zu liefern. Wenn Sie einen Befehl geben, nur, wird das Betriebssystem für diesen Befehl aussehen an verschiedenen Stellen. Wenn es verfügbar ist, sollte sie es finden. Der Computer wird Bash überall dort, wo es sich befindet und führen Sie es, so dass Sie nicht brauchen, dann besorgt, wo er sie findet zu sein. Es gibt möglicherweise andere Sorgen hier, als ob es mehr als ein Bash-Version, die möglich wenn auch unwahrscheinlich ist. Also das ist ein weiterer Weg, um mit diesen Dingen umzugehen. Ausschreibungsleitungen können jegliche Shell aufrufen. Sie können auch andere als Schalen Dinge nennen. Beispiele habe ich hier sed, die die Strom-Editor ist; awk, die ein Muster Verarbeitungssprache ist; und perl, eine sehr hoch entwickelte Skriptsprache. Wenn Sie einen Bezeichner Linie, die eines dieser Programme an den Anfang, es wird direkt in dieses Programm zu gehen anstatt eine Shell. Diese Programme haben Grenzen ihrer Fähigkeiten. Perl ist sehr fähig. Sed ist ein Editor. Es kann Dinge, über die einfache Bearbeitung zu tun. Aber es schwer zu programmieren, dass sein kann. Außerdem Gabe von Argumenten und Sachen zu Skript ist entweder unmöglich oder verwirrend. Also in jenen Fällen, mit awk oder sed, ist es, zumindest in meiner Erfahrung, vorzuziehen, ein Shell-Skript-und Call-awk schreiben oder von der Shell-Skript sed eher als Aufruf awk oder als Skript-Bezeichner Zeile sed. Perl ist eine sehr abwechslungsreiche Sprache, wie ich sagte. Sie können keine interaktiven Befehle in Perl, was bedeutet, dass man nicht Teile des Skripts, die Sie entwickeln testen indem sie interaktiv. Allerdings ist es ein äußerst fähig Sprache und hat sich zu einem sehr weit verbreiteten Werkzeug entwickelt. Das ist nur ein wenig von einem Klammer Bemerkung über die Zeilen-Bezeichner. In allen oder den meisten Formen von Linux - wieder, ich kann nicht sicher sein, das ist alles - und in Mac OS, wenn Sie csh geben Sie tcsh und wenn Sie geben Sie sh bash zu bekommen. Sie wurden dort versuchen Sie die erweiterte Versionen dieser Schalen zu geben, aber dies kann verwirrend sein. Wenn Sie ein Skript mit tcsh schreiben oder Bash bietet beim Aufruf csh oder sh und dann versuchen, es auf einem Computer, die keine oder tcsh Bash laufen, Sie vielleicht einige Fehler bekommen, wenn gibt es Befehle gibt es in die diese Schalen nicht zu erkennen. Darüber hinaus können Sie Ihre Shell auf dem lokalen Computer aufgerufen haben sh oder csh nannte es und dann immer die erweiterten Muscheln. Sie können nicht einmal die Tatsache, dass Sie die erweiterte Schale sind zu denken. Das ist also ein potentieller Fallstrick. Wie wird festgestellt, dass, wenn Sie Typ SH Sie Bash zu bekommen, wenn Sie Typ csh Sie tsch bekommen? Es gibt Dinge in diesen Computern genannte Links was kann eine Verbindung zum Dateinamen auf die gleiche Sache beziehen. Es kann entweder zwei Namen für dieselbe Datei oder eine Datei, deren Zweck es ist, auf eine andere Datei verweisen. Sie sind hart und symbolische Links aufgerufen. Wir werden nicht in, dass geht heute nicht mehr werden. 1 Datei sh, ein Bash-Datei - - Es können auch einzelne Dateien sein aber beide Bash laufen. Dann gibt es noch eine weitere Qualifikations hier. Wenn Sie anrufen, eine dieser Schalen von einem Namen sind, Sie vielleicht denken, Sie würden die gleiche Funktionalität wie nannte es unter einem anderen Namen zu bekommen. Nun, das ist eigentlich nicht unbedingt wahr. Diese Befehle können Sie den Namen, mit dem sie genannt wurden prüfen und sie können auf der Grundlage des Namens, unterschiedlich verhalten. Es können Probleme, zu versuchen, zu einem Standard entsprechen. Einige von Ihnen werden von der POSIX-Standard oder ein anderes gehört haben, vielleicht auch andere Funktionen. Dies kann manchmal durch Befehlszeilenargumente gewählt werden oder durch Setzen von Shell-Variablen. Nannte es wie sh oder bash kann tatsächlich zu einer anderen Ausführung führen auch wenn es die gleiche Datei, die Sie ausführen. Eine andere Sache zu prüfen, ist, dass selbst wenn ein anderer Computer oder tcsh Bash hat, wenn sie nicht verknüpft, wie sie auf dem lokalen Computer sind wenn Sie ein Linux-oder Mac OS lokalen Computer haben, dann wieder werden Sie die Schale, die Sie sh oder csh rufen, nicht die, die man vielleicht lieber zu bekommen. Die aktuelle Bourne-Shell-Erweiterungen hat weniger als die in der Bash aber die in der Vergangenheit Original-Bourne-Shell. Als Folge, dass auch der Strom Bourne-Shell SH, auch wenn es nicht Bash, ähnelt der C-Sprache mehr als die C-Shell tut. Das war nicht der Fall, wenn die C-Shell zuerst erstellt wurde, aber es hat sich so entwickelt. Sie können hier feststellen, dass all diese Schale Namen mit Ausnahme der Bourne-Shell haben etwas zu zeigen, welche Shell sind sie - csh, bash - aber die Bourne-Shell ist nur sh. Warum? Das war die ursprüngliche Shell. Es war die Schale dann nicht eine Schale, und da war es die Schale, gab es keinen Grund, sie aus einer anderen Schale unterscheiden. Also das ist, warum es diesen Namen hat und immer noch tut. Diese Top hier ist eine Zeile aus einem Passwort-Datenbank für ein Konto habe ich da auf einem anderen Computer. Ich werde versuchen, diesen Namen zu erhalten, so können Sie diesen Teil am Ende zu sehen, die Schale. Das Passwort-Datenbank enthält die Anmeldeeigenschaften für alle Nutzer. Zu Beginn ist der Benutzername, mit dem Sie die letzten zwei Briefe von mir jetzt sehen kann. Die Felder werden dabei durch Doppelpunkte getrennt. Das letzte Feld, wie Sie sehen können, ist bin / tcsh, die Shell. Das ist die Shell-Bezeichner. Es gibt hier etwas Interessantes. Wenn Unix zuerst entwickelt wurde, gab es nur 1 Schale, so gab es keine Wahl gibt. Warum also hat sie ermöglichen ein Feld in der Passwort-Datenbank, um eine Schale geben? Ich weiß nicht, aber es ist ein Glück, dass sie es taten. Es ist ziemlich schwierig, Veränderungen in der Passwort-Datenbank-Format machen weil viele Programme beziehen sich auf das Format und müssten neu geschrieben werden. Es ist eine gelungene oder zufälligen Entwicklung, die sie enthalten den Acker. Diese Art von einer Passwortdatei Linie ist auf allen Unix-und Linux-Computern, so weit ich weiß verwendet. Der Mac hat sein eigenes System. Es hat tatsächlich eine Passwort-Datei mit den Zeilen in diesem Format, aber das ist nicht, wenn die Benutzermerkmale definiert sind. Eine weitere Bemerkung in Klammern gibt. Wenn Sie anrufen, eine Schale, können Sie es als eine Unterschale der vorhandenen Schalen nennen. Also, wenn ich hier gehen, wollen wir loswerden diese Dinge. Hier bin ich in der C-Shell. Diese Variable, die meine Schale genau identifiziert, eigentlich ist nicht immer eine zuverlässige Möglichkeit herauszufinden, wie Shell Sie laufen, aber in diesem Fall ist. Was, wenn ich gerade Art - Jetzt bin ich in der Bash. Einige Dinge werden die gleichen sein. ls sagt mir meine Befehle. Wenn ich einen Suspend zurück zu meiner C-Shell, ls, gleich. Right? fg, Vordergrund, zurück zu meinem Bash-Shell. pwd, aktuelle Verzeichnis, zurück zum C-Shell. pwd, anderes Verzeichnis - eigentlich kein anderes Verzeichnis in diesem Fall. Es ist das gleiche Verzeichnis. Sagen wir, ich will einen Befehl aufrufen: wo ls. Was bedeutet das? Es sagt mir, wo Sie den Befehl ls, der, der gibt mir eine Verzeichnisliste, in ls entfernt. Gehen wir zurück zu Bash-Shell zu gehen. Versuchen wir die gleiche Sache. Hmm, interessant, da, wo: Befehl nicht gefunden. Warum ist das so? Der Befehl wird in dem an die C-Shell integriert. Dies ist kein Befehl, der in den Speicher von woanders gelesen und ausgeführt werden muss. Die C-Shell läuft es durch die Übertragung der Ausführung, einen Teil seiner eigenen Code und es ist nicht in der Bash-Shell. So Bash, wie einen eingebauten Befehl nicht mit, sieht für sie, findet sie nicht, und wir bekommen eine Fehlermeldung. Also da haben wir eine Bash-Shell unter einer C-Shell laufen, und wir fordern, dass eine Sub-Shell. Und nur, wenn Sie neugierig sind, hat Bash-Shell seinen eigenen Weg zum Auffinden Befehle. Hash bezieht sich auf die Tatsache, dass es schneller durchgeführt werden, wird schneller gefunden. Das ist einer der wichtigsten Verbesserungen in der einige dieser Schalen gebaut. Bourne-Typ-Schalen werden für die Programmierung bevorzugt. Sie haben Kontrollstrukturen wie Schleifen, Bedingungen, die Art der Befehle, die Sie in Programmiersprachen wie C verwenden könnte oder welcher Sprache auch immer. Vielleicht sind Sie in Java programmieren bist, oder was auch immer. Muscheln haben die auch. Die Bourne-artige Shells, insbesondere Bash, haben mehr und sie flexibler gestaltet werden. Die Bash-Shell hat Arrays. Die ursprüngliche Bourne-Shell nicht. So daß für die Programmierung erheblich vorteilhafter sein kann. Die C-Shell tatsächlich Arrays haben aber nicht eine Menge von diesen anderen Funktionen. Die Bourne-artige Shells wird schneller ausgeführt wenn sie nicht die Funktionen für die interaktive Verwendung bestimmt. Sie laden Dinge nach unten zu einem Zweck, das holt sie zu einem anderen Zweck. Es ist das Trade-off gibt. Diese Merkmale, die für die interaktive Nutzung bestimmt sind sind wirklich wenig oder keine Verwendung für Scripting. Es ist möglich, eine interaktive Unterschale genau wie die, die ich dort gestartet verwenden zu testen, Befehle, die Sie beabsichtigen, in einem Skript verwenden. Das ist, was man nicht mit perl zu tun. Sie können es mit den Schalen zu tun. Auch die Strukturen wie für Schleifen und so weiter kann interaktiv ausgeführt werden. Sie sind manchmal sinnvoll interaktiv ausführen, aber eher Sie mit ihnen, um ein Skript zu entwickeln. Aliases. Das wird über die C-Shell sein. History-Mechanismus, wo man auf frühere Befehle zu erhalten oder Teile von ihnen, dass Sie bereits ausgeführt haben. Auch über die C-Shell, die Bourne-Shell und die Korn-Shell haben diese Dinge, aber ich werde mich nicht in sie zu erhalten. So sind hier einige nützliche Aliase, die ich habe. Anstelle der Eingabe ls - es ist eine gemeinsame Befehls - geben Sie einfach l und sparen Sie sich ein Charakter. ls mit verschiedenen Optionen, alle, die Arbeit. Beachten Sie, dass diese Definitionen haben Anführungszeichen um sie herum. In diesen Fällen sind die Anführungszeichen nicht notwendig. Wenn Sie diese Aliase ohne die Anführungszeichen zu definieren, wäre es immer noch funktionieren. Sie werden empfohlen. Es gibt Situationen, in denen Sie nicht verwenden können, das Zitat weil Sie etwas zu geschehen, welche das Zitat würde verhindern wollen. Manchmal kann man Teil der Definition zitieren, aber nicht alles. Es ist auch allgemein empfohlen, einfache Anführungszeichen statt doppelte Anführungszeichen zu verwenden. Doppelte Anführungszeichen Auswirkungen auf Variablen-Definitionen, Besonders wodurch sie nicht stoppen ausgewertet werden. Warum sollten wir, um die Bewertung zu stoppen? Und wie Zitate zu tun, dass für uns? Hier ist ein Befehl, die Sie interessant finden könnte. 'Ls g *' g *, wie Sie wahrscheinlich wissen, ist ein Wildcard-Ausdruck für alle Dateinamen die mit g beginnen. Wenn ich gerade in einem Befehl ls g * zu schreiben, werde ich eine Liste aller dieser Namen in meinem aktuellen Verzeichnis. Wenn ich diesen Alias ​​definieren, wie es hier mit den Kursen, wird es diesen Befehl in Ihrem aktuellen Verzeichnis, wo Sie es laufen laufen. Aber wenn Sie die Aliasdefinition ohne die Anführungszeichen laufen, sie bewerten die Wildcard g *, wenn es läuft diesen Befehl definieren. So die Definition des Alias ​​ls durch die Liste der Dateien im Verzeichnis folgen in dem der Befehl Alias ​​ausgeführt wird, unabhängig davon, wo Sie tatsächlich beabsichtigen, den Befehl auszuführen. Das ist nicht viel nützen, und die einfachen Anführungszeichen verhindern, dass die Bewertung der Sternchen. So bekommst du nur die Definition Befinden ls g *. Dann, wenn Sie den Aliasnamen ausführen, lgs, dann bringt es das aus. Jetzt gibt es keine Zitate, und es wird das Sternchen zu bewerten, wenn Sie den Befehl alias laufen. Also das ist eine Sache. Doppelte Anführungszeichen würde, dass hier dieselbe Wirkung haben, aber es gibt andere Fälle, in denen Anführungszeichen würde nicht so gut funktionieren. Hier ist eine andere. Sie können den Befehl grep kennen. Der Befehl grep verwendet werden, um eine Datei für die Zeilen, die bestimmte Zeichenfolgen haben zu scannen. So gehen wir hier, und ich werde von meinem Bourne-Shell zu beenden. Okay. Hier ist eine Datei. Sagen wir, es ist grep abc Saiten. Da ist es. Wenn ich grep zddd, bekomme ich nichts. Okay. So findet es einen String, es berichtet, es nicht zu finden, ist es nicht melden. Es gibt keine Linie, die die Zeichenfolge auf sich hat. Es gibt alle Arten von Optionen, die Sie hier in der Dokumentation finden. Hier ist eine Möglichkeit, es zu tun. Was ist mit diesem, alias grabc 'grep abc'? Das wird ein Argument enthalten, wenn der Alias ​​definiert. Also, wenn ich das hier, jetzt, wenn ich grabc tun, jetzt der Alias ​​umfasst mehr als den einfachen Befehl. Es hat auch das Argument. So weit das geht. Ich habe einen anderen Befehl hier, dieses, also sind es in verschiedenen Saiten und zeigen, dass dies nicht etwas zu finden gibt, da es nicht übereinstimmt. Was, wenn ich in der Alias-Definition die Datei, die werde ich suchen, sind und ich möchte als Argument für den Alias ​​die Zeichenfolge, die ich suche geben? Ich möchte vielleicht abc als Argument für meinen Alias ​​sagen, aber der Alias ​​bereits die Datei bestimmt. Und das ist, wo dieser Ausdruck kommt in. Beachten Sie, hier haben wir grep wie zuvor. Wir haben die Datei hier, Streicher. \! ^, Irgendwie ein seltsamer Ausdruck, nehme ich an, wenn Sie es nicht gesehen haben. Ausrufezeichen ist Teil der C-Shell-History-Mechanismus. Es kann früher Befehle erinnern, kann es Argumente, um die Befehle erinnern und so weiter. Die Geschichte Mechanismus als Teil des Aliasing verwendet. Wenn Sie eine Linie nach dem Ausrufezeichen angeben, wird es auf dieser Linie in der Verlaufsliste beziehen, die wir werden nicht immer in jetzt, da es ein ganz anderes Thema. Es ist möglich, Teil einer Zeile angeben. So! 3.02 würde das zweite Argument des Befehlsnummer 3 sein. Die Einfügemarke hier in diesem Ausdruck steht für das erste Argument. Wenn Sie geben es nicht einen Hinweis, welchen Befehl Sie sich beziehen, es bezieht sich auf den unmittelbar vorangehenden Befehl, und der Cursor ist ein Symbol für das erste Argument. Weil es die Einfügemarke und nicht die Anzahl, die Sie nicht brauchen, um den Darm zu verwenden, so! ^ bedeutet die erste Argument für den vorherigen Befehl. Hier ein wenig gemischt. In diesem Fall, wenn Sie dies als Alias-Definition zu verwenden, die Geschichte Referenz verweist zurück auf die Befehle in dem der Alias ​​verwendet wird. Also das geht zurück ein Befehl als eine Geschichte Betrieb aber als Alias ​​Betrieb es bezieht sich auf den Befehl in denen Sie schreiben würde, sagen, grstrings_file. Wir haben die Angebote hier in sie. Was ist der Backslash für? In diesem Fall, wie auch anderswo, wissen wir nicht, die Geschichte Mechanismus ausführen wollen bei der Definition des Alias. Wenn wir nicht den umgekehrten Schrägstrich gibt es nicht haben, würde die Schale im ersten Argument ziehen des Befehls rechts, bevor es diesen Alias-Befehl, die wir nicht wollen, lief. Wir wollen, dass dies in dem Befehl alias gebaut, um später in einem Argument aufzurufen. Einfache Anführungszeichen nicht entgehen ein Ausrufezeichen, die die Geschichte auf. Vielleicht wissen Sie, der Ausdruck Fluchtmittel, um die Bedeutung von etwas zu ändern. In diesem Fall bedeutet es, etwas aus, die eine besondere Bedeutung zu stoppen. Besondere Bedeutung Ausrufezeichen ist Geschichte. Flucht-und es hat nicht diese Bedeutung. Zitate machen das nicht; Backslash tut. Daher freuen wir uns tatsächlich mit 2 Ebenen von hier entkommen. Ich werde diesen Befehl in das andere Fenster ohne die Eingabe bewegen durch die Verwendung dieser Bearbeitungsvorgänge, die Sie finden können nützlich. Etwas hier sonst werde ich Ihnen zeigen. Wenn Sie nur tippen alias ohne Argumente, sagt Ihnen, alle Ihre Argumente. Das ist ein Haufen von Alias-Namen ich hier schon außer denen, die ich habe mit heute hier. Aber wenn ich nur mit dem Namen eines Alias ​​geben, es sagt mir, was es bedeutet. Beachten Sie, dass die Anführungszeichen sind weg und der Backslash ist weg. Dieser String ist hier das Ergebnis dieser Aliasdefinition, und jetzt hat es einfach! ^ in sie. Das wird in der Datei Saiten für nichts zu suchen. Also, wenn ich grstrings_file Saiten, habe ich nicht, es gibt nichts zu suchen, aber es ist in Strings suchen. Es hat nicht die Wortketten finden Sie in der Datei Strings, aber es finden abc. Und es sieht nicht finden, dass. So, hier geben wir ein Argument, das in der Definition des Alias-Hits, dass in diesen eingefügt. Es ist, wo dieser Ausdruck kommt. Sie können mehr als 1 zu verwenden. Die Einfügemarke ist ein Symbol für das erste Argument. Wenn Sie ein zweites Argument benutzen wollten, würden Sie dann sagen: 2. Es gibt kein spezielles Symbol für das zweite Argument. Und weil Sie eine Zahl sind, müssten Sie den Doppelpunkt zu verwenden. Es gibt jedoch noch eine andere Wahl. Das Dollarzeichen steht für das letzte Argument. Und weil das ist ein Symbol, können Sie den Doppelpunkt weglassen. So wäre es das letzte Argument in der Liste sein. Und es gibt auch, dass man. Asterisk bedeutet, dass alle, so ist dies die komplette Liste der Argumente, wieder, können Sie den Doppelpunkt weglassen, weil es nicht eine Zahl. Ich hoffe, Sie alle beobachten alles. Die Geschichte Mechanismus kann in der History-Liste auf frühere Linien zu gehen. Sie könnten dies in einem Alias-Definition zu tun. Ich habe noch nie getan. Es würde den Effekt des Herausziehens frühere Befehle aus der History-Liste haben wenn Sie den Aliasnamen, die verschiedene Befehle ausführen könnte je nachdem, wann und wo Sie es ausführen. Denkbar möchten Sie vielleicht einen solchen Verweis ziehen nur wissen, was ein früherer Befehl war. Ich habe noch nie gesehen, das passiert. Ich nehme an, jemand Sie vielleicht, aber das ist sehr unwahrscheinlich. Es ist eine andere Sache hier. Wenn Sie diese Geschichte Typ Referenz zu verwenden, dann werden nur die Argumente an denen es eine solche Referenz verwendet. Wenn Sie einen Alias-Definition, die nicht mit einem Geschichte-Typ-Referenz, wenn es nur wird der Anfang der Befehls und Sie weitere Argumente haben, dann ist alles, was Sie nach, dass Typ wird dem Befehl hinzugefügt werden. In diesem Fall wird das Beispiel, das ich gerade dort gab, haben wir das erste Argument; haben wir nicht benutzt keine andere. Wenn andere Argumente hatte auf der Kommandozeile angegeben worden wäre, wäre sie nicht verwendet werden. Also, wenn Sie die Geschichte Bezug zu benutzen, dann müssen Sie es verwenden, um jedes Argument zu bekommen. Es ist eine andere Sache hier möchte ich nur erwähnen, teilweise Klammern, nämlich, dass diese Geschichte Mechanismus mit dem Ausrufezeichen geht zurück auf die ursprüngliche C-Shell. Die tcsh eingeführt Geschichte Operationen die die möglichen Befehle und Streicher von den Editoren, entweder Emacs oder vi. Meine persönliche Meinung ist Emacs ist viel einfacher, für diesen Zweck verwenden auch wenn Sie vi für Ihre regelmäßige Bearbeitung zu verwenden. Es gibt verschiedene Emacs-Befehle, die jetzt für die Geschichte angepasst sind. Steuer P bekommt die vorhergehende Zeile in der Verlaufsliste. Ein weiterer Steuer P erhalten Sie die eine davor. Der Pfeil nach oben macht das Gleiche. Steuer N bekommt den nächsten Befehl, wenn Sie bereits wieder einige Möglichkeiten durchgeblättert. Pfeil nach unten tut das auch. Sie können mit den Pfeilen und verschiedene andere Dinge, von links nach rechts. Diese können den History-Mechanismus machen viel einfacher als die Verwendung des Ausrufezeichen-Syntax, aber Sie können nicht verwenden würden, dass in einem Alias-Definition. Wir gehen über, dass eine andere Zeit. Variablen. Sie wissen, welche Variablen in Programmiersprachen. Die Schalen haben sie auch. Die C-Shell verwendet den Befehl gesetzt, um Variablen zuzuweisen, so dass die Variable a setzt auf den Wert von b - wie gesagt, eine nutzlose Definition, sondern ein Beispiel dafür, wie diese genutzt werden. Das Set Befehl wird eine Variable zu erstellen, wenn sie nicht bereits vorhanden sind. Die Positionsparameter für Shell-Skripte können als Variablen werden, aber die Verwendung von ihnen, und die Regeln für sie sind etwas anders. Sie können einen Wert nicht zu $ ​​1 vergeben im Rahmen eines Skripts. Sie müssten, um eine neue Variable zu diesem Zweck definieren, wenn einige von euch wollte. Geben ohne Argumente setzen und Ihnen eine Liste aller aktuell definierten Variablen zu erhalten. Und lassen Sie uns über meine anderen Schale hier und sehen, was wir bekommen, wenn wir das tun. Eine recht lange Liste gibt, oder? Blättern Sie ein wenig. Schauen Sie sich das alles. Einige dieser Dinge werden automatisch von der Shell definiert. Die Shell erstellt die Variable und gibt sie einen Wert. Einige von ihnen werden von der Schale definiert ist, aber dann durch den Benutzer neu definiert nach seinen Vorlieben. Und einige von ihnen werden vom Benutzer je nachdem, was er tut, dass Tag erstellt. Das ist nur ohne Argumente gesetzt. Es ist eine seltsame Eigenschaft hier dieser Sache. Es müssen entweder keine Leerzeichen zwischen dem Gleichheitszeichen und dem Variablennamen sein und der Wert oder die Räume auf beiden Seiten des Gleichheitszeichens, wie in dieser. Das wird nicht funktionieren, und das ist eigentlich ein gültiger Befehl aber es wird nicht das tun, was Sie wollen. Dieser Befehl wird funktionieren, denn wenn man nur sagen gesetzt und einen Variablennamen mit keine Gleichheitszeichen oder eingestellt und ein Variablenname mit einem Gleichheitszeichen und kein Wert, es wird die Variable auf Null gesetzt. So setzen Sie ein = ist ein gültiger Befehl. Das Set-Befehl kann mehr als 1 Variable auf der gleichen Linie zu definieren. So daß dieser Befehl hat hier die Wirkung der Definition a und b Null-Werten. Wahrscheinlich nicht, was Sie wollen. Dieser hier, bereits erwähnt, wird zu einem Fehler führen weil = b ist kein gültiger Ausdruck. Ein Variablenname kann nicht mit dem Gleichheitszeichen beginnen. Und es sind diese Dinge hier weiter. Die Doppelpunkte wurden verwendet, um Argumente aus der Geschichte Linien wählen, und sie können verwendet werden - und ich habe nicht vor zu gehen - um diese Dinge zu ändern. Sie können auch verwendet werden, um Shell-Variablen ändern. Dieser hier, $ a, hat einen Wert. : R abheben wird eine Erweiterung. Eine Erweiterung wird alles nach einem Punkt zu sein, ein Punkt und alles ihm am Ende einer Datei, nur am Ende der Liste nach dem letzten Schrägstrich. Also ich habe es hier. eine ist, dass. Es fallen die. O. Wenn es keine Verlängerung, nur die Pfadnamen nach dem letzten Schrägstrich, wird es keine Auswirkungen. a: h, dass variable Ausdruck, abheben wird das letzte Element des Verzeichnisses, wieder nur nach dem letzten Schrägstrich. So / a / b / c wird / a / b, aber dieses ist verändert, weil das Element nach der Liste ist null. Hier gibt es etwas, das auch ich möchte betonen. Diese Qualifikation nicht für die Existenz dieser Dateien zu suchen. Sie nur für Strings zu suchen. Diese sollen die Dateinamen zu manipulieren, Pfadnamen, aber sie kann auf einem beliebigen Zeichenfolge verwendet werden, auch wenn es nicht ein Dateiname. Und sie suchen nicht nach der Existenz, so, wenn es keine solche Datei, / a / b / c, das wird immer noch funktionieren. Ob es von Nutzen ist eine andere Frage, aber es wird immer noch funktionieren. Variablen sind unterschiedlich in den Bourne-Shells. Dazu kommen wir später. Dollar-Zeichen können ebenso wie die Ausrufezeichen und das Sternchen maskiert werden. Dollar-Zeichen mit einem Backslash oder den einfachen Anführungszeichen maskiert werden. Anführungszeichen haben die ungerade Effekt in allen Schalen zwingen die Auswertung eines Dollar-Zeichen variablen Ausdruck. Also, wenn es eine Möglichkeit entgangen ist, können die Anführungszeichen den Effekt haben wodurch es zu der ohnehin ausgewertet werden. Dies ist ein wenig verwirrend. Wenn es mehrere Ebenen der Flucht, wie einfache Anführungszeichen in doppelte Anführungszeichen oder doppelten Anführungszeichen in einfache Anführungszeichen, sollten Sie testen, um zu sehen, was passieren wird auf eine Variable, wenn Sie eines sind. Diese zwei Situationen - doppelt innerhalb von Einzel-, Doppel-Einzel Innenseite - nicht unbedingt geben Sie das gleiche Ergebnis. Umgebungsvariablen, gebundene C-Shell-Variablen. Environment-Variablen sind auch Variablen in der C-Shell, und sie sind auch Variablen in anderen Shells auch. In der C-Shell, sie sind unterschiedliche Sätze. Die Dinge, die ich zuvor gesagt habe etwa Shell-Variablen. Environment-Variablen sind ein deutlicher Satz von Variablen mit Ausnahme von mehreren Variablen, die wir gebundenen Variablen nennen, die sehr wichtig sind, und wir werden später in solche zu bekommen. Umgebungsvariablen werden automatisch weitergeleitet auf Muscheln oder Befehle, die von der Shell ausgeführt werden. Die anderen Dinge sind es nicht. Die Shell-Variablen sind die Aliase nicht. Environment-Variablen sind. Deshalb nennen wir sie Umgebungsvariablen die Idee ist, dass die Umwelt erstreckt sich über nur Ihre aktuelle Shell. Sie können verwendet werden, um die Dinge für Befehle definieren. Hier ist ein Beispiel. DRUCKER, LPDEST. Diese beiden Variablen können einen Drucker, ein Befehl nutzen, um Dinge zu drucken definieren. Wenn Sie mehrere Drucker um sich zu haben, möchten Sie vielleicht die, die Sie mögen. Der Grund haben wir 2 Variablen ist, dass unterschiedliche Befehlssätze wurden geschrieben Mit diesen verschiedenen Variablen. Man könnte sie unterschiedliche Werte zu geben. Die meisten wahrscheinlich, dass Sie beide den gleichen Wert zu geben. Diese Dinge funktionieren, weil die Befehle, die Druck machen wurden programmiert, um die Werte dieser Variablen zu untersuchen. Wenn ein Programm nicht so geschrieben, wenn es geschrieben, um etwas anderes zu tun, die Variable wäre irrelevant. Also das Betriebssystem ist nicht auf der Suche nach diesen Variablen jedes Mal, wenn Sie einen Drucker verweisen. Ein Befehl, der Druck tut, ist für diese Variablen suchen, wenn sie auf diese Weise programmiert. Diese Variablen werden oft in Ihrem Initialisierung Dateien definiert aber nicht notwendigerweise. Sie können sie auf der Kommandozeile zu definieren. Sie können in einem Befehl definiert werden. Ein Befehl, der etwas läuft vielleicht über eine eigene Auswahl von Variablen - Variablen, die spezifisch für eine bestimmte Software sind beispiels. Sie werden definiert werden, wenn Sie dieses Paket auszuführen. Wie werden diese Variablen zu einer Sub-Shell übergeben? Wenn eine Sub-Shell geschrieben wird, ist es nicht in diesen Bereich schreiben. Die Fläche der Unterschale, die Umgebungsvariablen widmet wird nicht durch die Unterschale geschrieben, es ist durch Kopieren geschrieben. Wenn Sie eine normale Befehl ausführen, wie diese Befehle zu drucken oder was auch immer, sie beginnen, indem Sie eine neue Shell. Die Schale schafft eine Shell und überschreibt dann ein Teil davon mit dem Befehl, den Sie ausführen, was ein wenig verwirrend ist, aber das ist, wie diese Befehle erhalten die Umgebungsvariablen dass sie dann später beziehen. Der Befehl hier für die Festlegung der variablen setenv. Das ist, wie Sie ihn definieren. Es ist drei Elemente: setenv, Variable, Wert. Wenn Sie gerade keine Argumente setenv, was bekommen Sie? Eine Liste aller dieser Variablen. Wieder ist es eine schöne lange Liste, und in diesem Fall, wie in den anderen, Diese Variablen werden weitgehend durch meine Anmeldevorgang von der Shell selbst definiert als durch alles, was ich tat. Es gibt einen weiteren Befehl hier printenv. Das druckt auch die Umwelt. Beachten Sie, dieses letzte, was hier, EDITOR = vi. Das sagt, dass, wenn ich mit etwas, das einen Editor ruft und ich weiß nicht angeben, ein Editor und erlaubt es mir die Wahl, kann es mir geben vi. Was ist, wenn ich printenv HERAUSGEBER? Es sagt mir, was es ist. Kurz vor, dass es eine Variable, WENIGER. Dies sind Ihre Standardoptionen, wenn ich das LESS-Befehl, was zeigt Dateien. Also, wenn ich das tue, kann printenv ein Argument oder 0 Argumente übernehmen, nicht mehr als 1 ist. Es gibt auch andere Befehle, aber wir gehen nicht in das ganze heute. Denken Sie daran, es gab die Modifikatoren für die Shell-Variablen wie: h, die das letzte Element einer Pfad fallen wird, oder: r, die eine Verlängerung fallen wird. Diejenigen, die jetzt an den Umgebungsvariablen zu beantragen. Sie haben nicht zu verwenden. Früher war es so, sie könnten nicht geändert werden. Jetzt können sie sein. Es ist eines der Fortschritte mit der Entwicklung der Schalen über die Jahre. Ich sagte, dass die Schalen als Teil der Umgebungen und Shell-Variablen in der C-Shell sind, mit einigen Ausnahmen, unterschiedliche Sätze. Sie können eine Umgebungsvariable und eine Shell-Variable mit dem gleichen Namen zu etablieren. Sie werden verschiedene Variablen sein, sie können unterschiedliche Werte haben. Ändern Sie den Wert einer wird den Wert des anderen nicht ändern. Diese Variablen sind alle mit dem Dollarzeichen ausgewertet - $ a, $ was auch immer. So was, wenn Sie das? Möchten Sie wissen, was man Sie? In meinen Tests habe ich die Shell-Variable, aber dies ist nicht dokumentiert und Sie können nicht darauf verlassen. Also frage ich Sie, ist Shell-und Umgebungsvariablen die Schaffung mit dem gleichen Namen eine gute Idee? Nr. Ok. Was sind die großen Ausnahmen, in denen die Umwelt und die Shell-Variablen miteinander verknüpft? Es sind diese vier. Großbuchstabe TERM-Umgebungsvariable, Shell-Variable Begriff in kleinen Buchstaben, die Art der Terminal-Emulation. Ich werde einfach hier um zu gehen und ich werde Echo, eine nützliche Befehl hier zu tun, $ TERM $ term. Und da. xterm ist ein Terminal-Typ für Fenster in das X Window System angezeigt. xterm-color ist eine Variation, dass die verschiedenen Farben ermöglicht. Warum definieren wir diese? Was ist das gut? Befehle, die den Bildschirm wie der Editor neu ordnen senden bestimmte Sequenzen, die so genannte Escape-Sequenzen, mit einem Terminal oder einem Fenster, um es neu anzuordnen und so weiter. Diese Sequenzen sind für verschiedene Arten von Terminals. Das sagt er, welche zu verwenden. Manchmal gibt es Probleme gibt. Vielleicht möchten Sie das ändern. Wenn die Dinge nicht funktionieren, manchmal ist die Terminal-Typ ist falsch eingestellt, Sie können es durch die Neudefinition der tige variable beheben. In diesen Fällen kann die Änderung einer Variablen, die Umgebungsvariable oder die Shell-Variable, sollte die andere ändern. Ich habe entdeckt, durch die Erfahrung, dass eine Änderung TERM in Großbuchstaben nicht immer tige Shell-Variable ändern in kleinen Buchstaben. Das ist ein Fehler. Ich weiß nicht, wenn es das ist immer wahr. Die meiste Zeit ist es nicht wahr, aber kann es sein. Also, wenn Sie eine Änderung vornehmen, nur überprüfen, dass aus. Es ist nicht oft, dass man diesen Wert ändern müssen, aber einmal in eine Weile zu tun. Umgebungsvariable USER. Auch Umgebungsvariable in Großbuchstaben, Shell-Variable in Kleinbuchstaben. Dies ist Ihr Benutzername. Es ist nur unter sehr außergewöhnlichen Umständen dass Sie das ändern möchten. Wenn Ihr Benutzername ist jemand anderes, kann es alle möglichen Dinge zu werfen. Home-Verzeichnis, Home-Verzeichnis des Benutzers. Auch hier würden Sie nicht wollen, das zu ändern. Beachten Sie in all diesen Fällen und die, die wir sind dabei, zu decken, die Pfad-Variable, Umgebungsvariable ist in Großbuchstaben und das gebundene Shell-Variable ist in kleinen Buchstaben. Wenn Sie ein zu ändern, sollten Sie die andere ändern. Diese Art der Bindung kann nicht festgestellt, wie Sie können nicht zwei Variablen zu binden, anders als diese 4, und die Bindung in diesen Variablen kann nicht rückgängig gemacht werden kann, kann man nicht trennen. Also diese vier Paare von Variablen gebunden sind. Sie wird es immer sein. Keine andere werden. Darüber hinaus wäre es möglich, Variablen mit demselben Namen zu erstellen der entgegengesetzten Typs. Sie könnten eine Shell-Variable Begriff in kleinen Buchstaben machen oder eine Umgebungsvariable TERM in Großbuchstaben. Diese Variablen würden unabhängig von diesen Variablen gepaart sein und sie sind unabhängig voneinander. Ich kann mir nicht vorstellen, warum man das tun würde, es sei denn Sie wollen die Menschen zu verwirren. Dieser hier, Pfad-Variable, dies ist ein wirklich wichtiges. Eine andere Sache hier ist, dass es Fälle geben, Variablen mit ähnlichen gepaarten Namen, die nicht miteinander verbunden sind. Es können Variablen, Shell und Shell sein, in großen und kleinen Buchstaben. Basierend auf diesen Namen, die Sie nicht wissen, ob diese Variable ist ein Shell-Variable oder eine Umgebungsvariable, und sie sind nicht miteinander verbunden. Also diese Art von gepaarten Namen bedeutet nicht gebundenen Variablen. Der Pfad-Variable, die ich vorher zeigt, ist eine Liste von Pfadnamen in dem die Schale sieht für Befehle. Lassen Sie uns über dieses Fenster hier und wir echo $ PATH, Großbuchstaben zu tun - Umgebungsvariable - echo $ Pfad, Kleinbuchstaben - Shell-Variable. Beachten Sie, dass die Liste der Verzeichnisse ist die gleiche. Diese sind gebunden. Ändern Sie eine, die andere ändern Sie. In der Umgebungsvariablen die Elemente durch Doppelpunkte getrennt. Beachten Sie, dass. Die Shell-Variablen werden durch Leerzeichen getrennt. Diese Umgebungsvariable ist eine einzelne Saite. Die Shell-Variable ein Array ist. Die Bourne-Shell nicht über Arrays. Bash tut, aber das ist schon ein fester Teil der Schale. Dies ist ein Einzelstrang und kein Feld. Die C-Shell hatte immer Arrays. Die Arrays sind viel einfacher, mit zu arbeiten. Sie können Teile davon beziehen. So echo $ path [1] und ich / usr / bin, das erste Element. Auch hier erinnern Dollar-Zeichen steht für das letzte Element der Verlaufsliste. Was passiert da? Es versucht, Dollar-Zeichen als Variable Symbol. Ich entkommen. Oops. Es wäre nicht das auch nicht. Einige dieser Dinge nicht so gut funktionieren. Vielleicht werde einfach lassen wir das aus. Asterisk bezieht sich auf die ganze Sache, aber das ist, was Sie bekommen, wenn Sie nicht ein Element angeben. Eine weitere Möglichkeit, Feldvariablen manipuliert werden kann, Anzahl der Elemente gibt, 7 Elemente. Hier das Nummernzeichen setzen wir vor dem Variablennamen. Hier ist eine andere. Setzen Sie ein Fragezeichen gibt. Das ist ein logischer Wert. Das zeigt an, dass die Variable existiert. Es ist eine andere Art zu arbeiten mit Variablen. Dass durch die Möglichkeit, nicht auf eine Anordnung variabel sein. Das könnte eine Variable sein. Und wenn ich das tue, gibt es keine solche Variable, und ich bekomme eine 0 ein. Ein weiteres kleines Ding dort über variable Auswertungen. Zurück zu dieser hier, wenn aus irgendeinem Grund Sie mit diesem arbeiten wollte statt mit dem Array, die Shell-Variable, gibt es Befehle, die diese Dinge auf der Grundlage der Doppelpunkt trennen kann. In der Tat, wenn Sie gehen, um möglicherweise tun dies in der Bash-Shell, eine Art von einem Skript, das wäre wohl sein, wie Sie es tun würden. Aber in der C-Shell ist es viel einfacher, um das Array zu verwenden. In der Bourne-Shell-Variablen werden durch einen einzigen Ausdruck wie diese zugewiesen, die Art, wie Sie vielleicht eine Variable in einer Programmiersprache zuzuordnen, und hier darf kein Leerzeichen sein. Es ist notwendig, dass es nur ein String sein. In der Bourne-artige Shells, alle Variablen Shell-Variablen. Environment-Variablen sind eine Teilmenge der Shell-Variablen. Sie werden aus den Nicht-Umgebungsvariablen durch Exportieren aus. Der Befehl dazu ist Export, wie Export DRUCKER. Wenn wir eine solche Variable zu definieren, wenn wir wollten einen Druckbefehl zu finden, müsste es eine Umgebungsvariable zu sein, und das ist, wie wir es ein. Hier gibt es etwas Art von verwirrend. Dieser Ausdruck, den Export in die Umwelt, ergibt sich aus dieser Bourne-Shell-Konzept, doch dieser Begriff wird in den Beschreibungen der C-Shell verwendet wird, wo kein solcher Befehl Export. Wenn Sie nur sagen, Export von selbst, erhalten Sie eine Liste der exportierten - Also, wenn ich gerade hier zu exportieren, keine solche Sache. Okay, da wir gehen. Diese Dinge, die übrigens auch von der Shell definiert. Ich wollte nicht einer dieser von mir selbst zu definieren. Die Schale hat alle möglichen Dinge von selbst aus. Es sollte die Dinge automatisch. In Bash oder Korn-Shell, können Sie einen Befehl wie diesen ausführen können, geben, die sowohl einen variablen Wert und exportieren es in 1-Befehl. In der Bourne-Shell müssen sie getrennte Befehle wie ein Export sein. Hier ist ein weiterer Aspekt, die verwirrend ist. Das Set-Befehl in der C-Shell-Variablen definiert und ohne Argumente sagt Ihnen, was die Variablenwerte. In der Bash-Shell, das Set-Befehl ohne Argumente macht das Gleiche, aber mit Argumenten, es macht etwas ganz anderes. Das sind also die verschiedenen Argumente hier. Einige von diesen sind Umgebungsvariablen, einige von ihnen sind Shell-Variablen. Alle von ihnen sind Shell-Variablen wirklich. Einige von denen sind Umgebungsvariablen. Das Set-Befehl mit Argumenten verwendet werden, um zu arbeiten auf die Positionsparameter an ein Skript, Das ist ein Weg, um sie alle auf einmal. Wir können nicht wirklich in diese gehen heute. Es kann auch verwendet werden, um Shell-Verhalten zu ändern. Besonders in der Bash gibt es Variablen, die bestimmen, wie die Shell verhält. Dann auch nur diesen einen Befehl, die Sie sehen, dieser Befehl. Setzen, gefolgt von Variablen und Variablentypen ist in der Korn-und Bash-Shell verwendet. Es ist nicht obligatorisch, aber es kann verwendet werden, um die Werte der Variablen zu beschränken, was nützlich, um Fehler zu verhindern kann, und es ist ziemlich weit verbreitet. Also ich bin einfach nur zu erwähnen, dass, wenn Sie es irgendwo zu sehen. Die in dem Befehl. Angemeldet ich bereits erwähnt habe, wo der Befehl in der C-Shell, was Sie sagen, kann die Position eines Befehls Pfadnamen. Hier ist Befehl Substitution. Sie sollten auf Ihrer Tastatur irgendwo ein Zeichen, das wie folgt aussieht finden. Die Lage auf der Tastatur wird zu variieren. Wir haben es genannt Backquote. Es geht um die Größe von einem Angebot. Es geht von oben links nach unten rechts. Hier auf meinem Mac-Tastatur, es ist in der oberen linken Ecke. Das Zeichen kann verwendet werden, um einen Befehl innerhalb eines Befehls auszuführen. Wenn Sie einen Ausdruck in Backquotes haben, dass die Expression ist ein Befehl, es laufen. Die Ausgabe dieses Befehls Dann wird für die gesamte Backquote Ausdruck substituiert in einem Befehl, der länger läuft dann mit dieser Ausgabe als Teil der Folge von Argumenten und so weiter. Hier ist ein Befehl, dass verwendet. Lassen Sie uns zeigen, den Betrieb hier. Gehen wir hier, nehmen Sie die einfachen Anführungszeichen. Kontrolle A bringt mich an den Anfang der Zeile mit dem Emacs Bearbeitung Syntax. Bisher ist die Pfadnamen ist, was wo ist, aber wenn ich es so, dann steckt es in dieser Liste von Pfadnamen anstelle von diesem ganzen Backquote Ausdruck und läuft ls-l auf sie. Art bequem, oder? Also das ist eine nette Sache. Das ist, wie Backquotes zu arbeiten. Jetzt gehen wir nach unten ein wenig weiter. Diese sind Aliase. Ich benutze diesen. Ich werde versuchen, diese mit in ein Bearbeitungsvorgang zu erhalten. Okay. Nun wollen wir sehen, wie diese Definitionen kam heraus. Alias ​​LBH erzählte mir, wie es definiert. Beachten Sie, es ist einfach, aber die äußeren Anführungszeichen weggenommen zu haben und das Ausrufezeichen abgezogen. ! * Vollständige Liste aller Argumente. In einem Alias-Definition wird es, wo ich diese verwenden, gelten wieder. lwh ksh bash. Okay. Sehen Sie, wie das funktioniert? Es spart mir etwas zu tippen. Gehen wir ein wenig, nur um etwas anderes hier zu erwähnen. Beachten Sie hier diese verschiedenen Muscheln. Ich hätte das schon erwähnt haben. Die csh hat eine 2 hier und so auch / bin / tcsh. Wir konnten durch andere Mittel festzustellen, dass die sind eigentlich die gleichen Datei. Denken Sie daran, ich sagte, wenn Sie tippen Sie sh bash zu bekommen. Geben Sie diese, und Sie diese. Aber die sind nicht verbunden. Die haben einzelne Gäste gibt. Und das ist nicht die Art von Datei, die einen anderen anrufen. So sind die einzelnen Dateien, die C-Shell diejenigen sind die gleiche Datei. Hier wieder nach unten, der andere hier, dieser Alias, beachten Sie, dass dieses Kommando Datei ausgeführt wird. Das Alias ​​läuft, dass. Datei sehen Sie den Typ einer Datei. So FWH ksh bash. Okay. Das ist die Ausgabe der Datei-Befehl. Ich weiß nicht, ob Sie wissen, was das bedeutet hier, Mach-O Universal Binary mit 2-Architekturen. Es gibt 2 mögliche Prozessortypen in Mac und einige Programme geschrieben wurden, in der Lage, mit beiden ausgeführt werden, und die Datei-Befehl kann bestimmen, dass, so das ist, was das bedeutet. Beide Dateien wurden auf diese Weise geschrieben. So sehen wir, wie der Alias ​​funktioniert, werden wir sehen, wie die Backquote arbeitet, wir sehen, wie die eigentliche Datei ls oder Datei funktioniert. Das kann nicht funktionieren. Versuchen Sie, "wo, wo" und "lwh wo". Okay, lass uns versuchen. wo, wo. wo ist ein Shell eingebaut. Denken Sie daran, früher haben wir gezeigt, dass Bash hatte nicht wo. Wenn Sie in der Bash-Shell geben, wo, erhalten Sie eine Fehlermeldung. Es ist nur ein Teil der Schale, anstatt ein separates Kommando. Was passiert, wenn ich auf der Suche nach Typ lwh wo? Sehen Sie, was da passiert. Ran, wo, wo, habe diese Ausgabe, und dann versucht, ls laufen als l, wo ist ein Shell eingebaut. wo ist da, aber die anderen sind nicht vorhanden. Keiner von ihnen existieren, eigentlich. Also das funktioniert nicht immer, und es zeigt auch, wie einige Dinge weiß nicht recht, was tun Sie vielleicht gedacht haben. Gehen wir ein wenig nach unten weiter hier. Das hier ist in der Bash. Das ist auch der Befehl Substitution wie die Backquote. Aber im Gegensatz zu Backquote, verwendet es diese Variable Stil. Es gibt eine Anzahl von Ausdrücken, die mit einem Dollarzeichen beginnen, und während diese sind keine Variablen, die Verwendung des Dollarzeichens ausgeliehen sie um einen Ausdruck einer Art anzuzeigen. Dies kann durch Klammern oder Klammern oder doppelte Klammern umgeben sein, die einen anderen Zweck. Einzel Klammern sind hier ein Kommandosubstitution ebenso wie die einfachen Anführungszeichen. Doppel Klammern ist eigentlich eine Rechenoperation. Es gibt auch andere Schreibweisen, andere Operationen. Backquote-Syntax ist in Bash zur Verfügung. Jedoch ist dieses bevorzugt. Es ist viel einfacher zu lesen und sie nisten können. Sie können innerhalb $ (Kommando) haben einen anderen Befehl, so etwas wie - Ich eine Liste gibt. Das würde funktionieren, wenn ich die Backquote auch. Was, wenn ich etwas zu tun - Sie würden wahrscheinlich nicht wirklich verwenden Sie diesen Befehl, aber das interne Befehlsersetzung spiegelt die Namen aller Dateien, beginnend mit a, dann läuft dieser ein ls-l auf diese Dateien, und dann diese nur hallt die Ausgabe. Sie würde wahrscheinlich nicht tun, man würde nur das Echo oder ls tun, aber zeigt, wie das Verschachteln von Befehlen arbeitet. Also nur ein weiteres Merkmal hier.  Ich erwähnte dies früher, dass, wenn Sie haben, wo in der C-Shell, Geben Werke in den Bourne-artige Shells zur Ortung Befehle. Built-in Befehle, genau das, was ich da sage. Befehle sind Teil der Schale, wie, wo. Wenn die Shell führt einen Befehl wie ls, sucht er sie durch den Weg, findet sie in ein Verzeichnis irgendwo, liest, dass in den Speicher, wird eine neue Schale, liest den Befehl ls oder was auch immer in die Schale wo die Umgebungsvariablen bereits befindet, und dann überträgt die Ausführung zu. Built-in-Befehl, ist der Code für diesen Befehl in der Shell, so die Schale beginnt nur die Ausführung Teil seiner eigenen Code. wobei ein solcher Befehl ist. Es wird tatsächlich schneller. Es muss nicht alles in den Speicher zu lesen, es ist bereits im Speicher. Built-in-Befehle immer Vorrang vor Befehle mit dem gleichen Namen. Befehle, die in Verzeichnisse sind auf dem Weg können den gleichen Namen haben, Befehle in verschiedenen Verzeichnissen, Dateien in verschiedenen Verzeichnissen. Die eine, die früher in den Weg tritt ist, die Sie bekommen. Wenn es einen eingebauten Befehl, Sie bekommen es immer. Es gibt keine Möglichkeit sie eine niedrigere Priorität als einen Befehl in den Weg zu geben. Wenn Sie diesen Weg Befehl erhalten möchten, können Sie den vollständigen Pfadnamen eingeben. Wenn es einen Befehl aus, wobei in dem Weg irgendwo Sie / bin / wo geben könnte und Sie erhalten es würde. Wenn Sie nicht die ganze Pfadnamen eingeben möchten, können Sie einen Alias ​​definieren. In der Tat, wenn Sie den gleichen Namen wie die eingebauten Befehl gab dem Alias, es würde funktionieren weil die Aliasdefinition wird ausgewertet bevor die Schale fest, dass es einen eingebauten Befehl, der ausgeführt werden soll, ist. Dann wird das ein wenig komplizierter mit einigen Befehlen hier. Bei einigen Befehlen tatsächlich eingebauten Befehle und in den Weg. Einer von ihnen ist Echo, der Befehl, den ich gerade vor einer Weile in diesen Beispielen verwendet. Echo ist ein Befehl, in den Weg und es ist in jeder Shell. Sie müssen nicht unbedingt alle gleich verhalten. Es war ursprünglich ein Befehl nur im Weg. Es wurde an den Schalen später gebaut. Da gibt es Optionen, die auf die Umwelt hängen und die Befehlszeilenoptionen, die integrierten Befehle geschrieben wurden, die gleiche wie der Befehl, der in dem Weg gewesen funktionieren, es ist unwahrscheinlich, wären sie so geschrieben haben wenn der Befehl nicht bereits für den Pfad geschrieben. Also das hat Nebenwirkungen. Seine Geschichte hat Auswirkungen hier. Es gibt Optionen gibt. Es gibt auch eine durch eine Variable in der tcsh genannt echo_style Option definiert. Das ist eine dieser Variablen, die die Art und Weise, die Werke echo ändern. Es gibt andere Fälle, in denen Sie eine Variable zuweisen , dass die Art und Weise ändert, dass die Shell-Betrieb, einschließlich eines integrierten Befehl arbeitet. Es wäre nicht alles andere beeinflussen da andere Befehle haben keinen Zugriff auf die Shell-Variablen, nur die Umgebungsvariablen. Aber Shell-Operationen können die Shell-Variablen zu lesen. Das wird nicht für csh arbeiten. Das ist nur tcsh. Das ist eine der Verbesserungen. Parsing-Sequenzen hat, wenn es wertet Metazeichen wenn es wertet Variablen, Aliase Geschichte Referenzen. Es gibt eine bestimmte Sequenz für diese Dinge. Ist dies der Dinge in einer bestimmten Reihenfolge und bekommt etwas, das ein Ausdruck von einer Art ist die bereits ausgewertet hat, wird es nicht wieder auswerten. Wenn er es wird, dann wird es nur geben die Charaktere. Also, wenn Bewertung einiger Ausdrücke wie Kommando-Substitution oder variable oder was führt zu einer Expression was würden Sie wollen, ausgewertet werden, das wird nur funktionieren, wenn die Auswertung erfolgt später in der Sequenz. Ich hoffe, ich bin klar, dass dort. Das Parsing-Sequenz, eine Operation, bei der C-Shell, ist nicht das gleiche für integrierte Befehle, wie es für nicht-integrierte Befehle. Ich bin mir nicht sicher Bash dort. Zum Beispiel produziert, wenn ein Shell-Variable eine Geschichte Referenz, es wäre wahrscheinlich nicht in die Geschichte gehen. Es wäre nur das Ausrufezeichen erhalten. In der Tat, wir können nur versuchen, dass sich gerade jetzt. a = und wir müssen dies in es gesetzt. Oh, warten. Entschuldigung. Ich tat dies in der Bash. Ich wollte es hier zu tun. Sehen Sie, so dass es nicht zu bewerten, dass die Geschichte Referenz weil es schon über den Punkt der Auswertung Geschichte Ausdrücke wenn es die Variable ausgewertet. Also das ist ein Effekt der Parsen. Und wieder, integrierten Befehle sind nicht die gleiche Art und Weise. Gut. Lassen Sie uns auf die nächste Sie hier. Dies soll 1 Zeile sein, aber es macht es leichter zu lesen. Was bedeutet das? Sie erinnern sich vielleicht, dass wir Sternchen als Platzhalter Dateinamen zu bewerten, und es gibt auch andere Dateinamen Wildcards wie das Fragezeichen und Klammerausdrücke. Diese Art der Auswertung wird als Kleckse. gesetzt noglob zu Beginn dieses Befehls sagt das nicht tun. unset noglob sagt gehen Sie zurück zu tun. Beachten Sie, dass Satz glob würde diese Wirkung haben. In der Umgangssprache würde gesetzt oder nicht gesetzt glob noglob scheinen gleichwertig zu sein, aber hier ist es nicht. Es ist nicht gesetzt noglob. Jetzt tset. tset stand für Terminal-Set. Es ist nicht, die heute noch verwendet, aber bevor Windows-Systeme verfügbar wurde und Sie haben ein einziges Terminal hatte, haben Sie vielleicht, um die Art zu bestimmen. Und wenn etwas wurde über eine Ethernet-oder aus dem Netz kommt, möchten Sie vielleicht sagen, es ist ein vt100. VT100 ist eine Art Standard in der Terminal-Geschäft. Es stammt aus der Dezember-Terminal. Wenn Sie gerade tun Einwahl - bemerkt? Dies geht zurück eine Art und Weise, nicht wahr? Also, wenn wir einfach hier tset über, wenn ich nur tset tun, es ist das Zurücksetzen meinem Terminal, aber du hast nichts gesehen. Es hat nicht wirklich etwas zu ändern. -S Okay. setenv TERM xterm-color. Wir wissen bereits, dass der Begriff wurde so festgelegt, so dass nicht zu ändern. Das ist der Weg, wir würden es tun wollen. Aber beachten Sie, dass dieser Befehl, tset-s, nur diese Befehle ausgegeben. Es dauerte nicht ausführen. Es hat nicht diese Befehle ausführen, es auszugeben. Also das soll dann Befehle, die ausgeführt werden, produzieren wird. Sie erinnern sich an den Befehl in dieser Datei Ich zeigte Ihnen einen Q in sich hatte. Also lassen Sie uns das tun. Die Q unterdrückt eine Ausgabe, aber das macht hier keine Rolle, wie Sie sehen können. Ich bin gerade dabei, dass Ihnen zeigen, dass es keine Rolle spielte. Dies ist in Backquote-Syntax. Beachten Sie die Backquote hier, Backquote hier. Ich bin hier Weglassen dieser Dinge. Dies sind Fälle der sagt, was sie tun im Fall von bestimmten Arten von Terminals - Ethernet, Netzwerk, DFÜ-, was Sie haben. Es spielt hier keine Rolle, weil wir nicht tatsächlich alle diese Dinge. Ich bin nur zur Veranschaulichung den Befehl. Wenn ich das mit dem Backquote, was werde ich bekommen? Beachten Sie auch hier, dass diese enthalten den Satz noglob und entschärft noglob, Das sind also jetzt in der Definition überflüssig. Das war nicht immer wahr, aber jetzt sind sie in diesem Befehl enthalten. Aber mal sehen, was passiert, wenn ich das tue, und gehen Sie zum Anfang der Zeile mit Control A und das tue ich. Okay, gesetzt: Befehl nicht gefunden. Das ist irgendwie merkwürdig, ist es nicht? Set ist ein bekannter Befehl. Es ist ein Teil der Schale. gesetzt: Befehl nicht gefunden? Warum ist das so? Hmm. Nun, lassen Sie uns darüber nachdenken. Es läuft ein Backquote-Befehl Substitution, und tritt zu einem bestimmten Teil der Sequenz des Parsens des Befehls. Set ist eine integrierte Befehls. Also von der Zeit es tut diesen Befehl Substitution, es ist schon über den Punkt der Identifizierung integrierten Befehle bekommen. So behandelt eingestellt, als ob es ein Befehl auf dem Weg waren. Unnötig zu sagen, ist es nicht zu finden und Sie eine Fehlermeldung. Well. Es ist ein Beispiel für das Parsen Folge. Und was tun wir dagegen tun? Beachten Sie, diese sehr interessante Befehl hier, eval. Ich frage mich, was das bedeutet. Wenn Sie in die Bedienungsanleitung schauen - und lassen Sie uns nur das tun, um zu zeigen, wie verwirrend diese Handbücher sind - Mann tcsh verwirrt manuell, Dinge hier zu finden ist nicht einfach. Hier gehen wir, eval arg, so können wir ein oder mehrere Argumente haben und es gibt eine Liste der Dinge gibt. Behandelt die Argumente als Eingaben in die Schale und führt die resultierenden Befehle im Zusammenhang mit der aktuellen Shell. Dies wird normalerweise verwendet, um Befehle als Ergebnis des Befehls erzeugt auszuführen oder Variablensubstitution, weil Parsen erfolgt, bevor dieser Substitutionen. Sehr gut. Und hier sind sie auch auf den Befehl tset beziehen für eine Probe Nutzung wie die, die ich dir gezeigt habe nur. Jetzt muss ich das Fenster wieder zu einem brauchbaren Platz zu bekommen. Lassen Sie uns hier und wir werden sehen, dass eval kurz vor gewöhnt. Also mal sehen, was passiert, wenn wir - hier gehen wir mit den Pfeilen auf diesen Befehl und die Kontrolle von A bis Anfang eval. Okay, so funktioniert es. Wenn Sie eval tun, dauert es, was nach ihm kommt und macht es einen Befehl aus. Dies ermöglicht Ihnen, im wesentlichen analysieren es zweimal. Der Abschnitt verläuft hier diesen Befehl innerhalb der einfachen Anführungszeichen, wird die Ausgabe. Ausgabe soll wie diese als die Befehle hier ausgeführt werden bei dieser und dieser. So dass diese Befehle Hier, in dieser Reihenfolge, aber diese sind integrierte Befehle und es nicht bekommen kann sie sofort. Also gehen wir zu eval, nimmt eval, dass bis beginnt das Ganze wieder von vorn, und es funktioniert. Ein Beispiel beide backquoting, eval, Parsing, Folgen des Parsing, und ein Befehl, die wahrscheinlich von sehr geringem Nutzen für Sie ist heute. Okay. Alle Rechte, umask. Lassen Sie uns an diesem Befehl hier, umask 022. Ich frage mich, was das bedeutet. Lassen Sie geben einfach umask mit nichts dahinter. 22. Okay. 022 und es wieder tun. Wie Sie vielleicht schon erraten haben, umask ohne Argumente können Sie den aktuellen Maske; umask mit Argumenten macht es so, aber das war die, die ich schon hatte. Was bedeutet 022 das? Das sind hier die Schutzmaßnahmen für eine Datei. Sie bestimmen, wem es erlaubt ist zu lesen oder zu schreiben oder die Datei aus. Protections werden auch Berechtigungen genannt. Das r steht für Lesen, w für schreiben, und x, die nicht vorhanden ist, es steht für auszuführen. Es gibt 3 Kategorien gibt. Die 3 letzten Elemente sind in der Kategorie der Benutzer. Diejenigen, gelten für mich, den Benutzer. Diese 3 hier gelten für die Gruppe. Die Datei gehört zu Gruppe 1 können Benutzer mehreren Gruppen angehören, aber wenn der Benutzer in der Gruppe, zu dem diese Datei gehört, ist, dann dieser Schutz wird ihm dann, wenn er nicht der Benutzer. Und dieser ist jeder andere auch. Diese Kategorien schließen sich gegenseitig. Die Anwenderschutz gelten für ihn, die Gruppe Schutz für die Mitglieder der Gruppe, die von dem Benutzer, und die anderen Schutzmaßnahmen nur auf andere als die Benutzer-und Gruppenmitglieder Menschen gelten. Wenn es ein r oder aw oder x, bedeutet es, dass der Schutz gewährt wird. Wenn es einen Bindestrich, bedeutet das es nicht ist. Es gibt tatsächlich andere Dinge, die hier neben diesen gesetzt werden kann, was ich jetzt nicht in zu erhalten. Die umask definiert einen Standard für Dateien, die Sie erstellen. Und als eine Maske, im Grunde sagt, dass es die Bits, die Sie nicht gewählt werden. Wie hat sich diese Bits? Wenn Sie wissen, jeder von ihnen denken, als Oktalzahl, das ist der 1s bit, das ist die 2s, das ist die 4s. So 0 bis 7 wird beschrieben, welche Kombination von r ist, w ist und x die Sie für diese drei und eine ähnliche Zahl für diese und dann für diese. So bedeutet 0 022 für andere, für die Gruppe 2, 2 für den Benutzer. Aber dies ist eine Maske. Die Maske ist, was Sie nicht haben. Es tut mir leid. Ich habe Ihnen die Dinge in der falschen Reihenfolge. Es ist das erste 3. Diese 3 sind die Benutzer, diese 3 sind die Gruppe, diese 3 sind die andere. Leider habe ich Ihnen diese in der falschen Reihenfolge. Die 0, die die erste von denen ist, nicht den Wert anzuzeigen, aber wenn eine Zahl nicht da ist, ist es eine 0 ist. Das bedeutet, dass alle drei von ihnen erlaubt wäre. Beachten Sie, dass in diesem bestimmten die x ist nicht erlaubt. Der Grund dafür ist, daß die Schale in der Lage ist, die Bestimmung ob eine Datei ausgeführt werden soll oder nicht. Da dies nicht eine ausführbare Datei, hat es nicht die x eingestellt. Die 2 bedeutet, dass die Erlaubnis, die zweite Kategorie hier zu schreiben, die eine in der Mitte, wird verweigert. Also noch einmal, das sind die Dinge, die es verweigert. Nun, das ist x erlaubt, aber es ist nicht hier, denn es ist nicht ausführbar und in ähnlicher Weise für die anderen. Also das ist eine gemeinsame umask. Ein weiterer häufiger ein 700 - geben Sie sich alles, und niemand sonst irgendetwas. Und es gibt auch andere Möglichkeiten. Ich werde darauf zurückgehen. Mit der Geschichte kann ich wieder für die lwh, dort zu suchen. Okay. So, hier, das sind die Schalen. Bash, der Besitzer, der Systemkonto ist, kann alles. Gruppe und alle anderen tun können, lesen oder ausführen, aber nicht schreiben. Das man nicht einmal erlauben dem Besitzer, es zu schreiben. Wenn der Besitzer wollte, es zu schreiben, das Systemkonto, er würde den Schutz erstes ändern. Aber auch hier setzt die umask die Standardeinstellung durch Maskierung, durch die Angabe der Bits, die nicht eingestellt werden wird. Dies ist typischerweise in einem Ihrer Initialisierungsdateien, die die. Cshrc für die C-Shell ist oder die. Profil für die Bourne-artige Shells. Es kann auch an anderer Stelle, wenn es andere Initialisierung Dateien auf dem System. Wie auch immer, das ist umask. Es ist etwas, was irgendwie merkwürdig hier, und das ist, warum gibt es einen einzigen Befehl für diese? Wenn ich schreibe, würde ich es eine Variable, umask = gewissen Wert. Warum gibt es eine ganze Befehl nur für diesen Zweck? Der Grund ist, das geht nur zurück zu den Ursprüngen von Unix. Unix war nur einige Programmierprojekt in den Bell Labs in den frühen 1970er Jahren. Die Leute kamen zusammen, um Programm. Sie wollten nie, dass es eine weltweite Betriebssystem zu werden. Unterschiedliche Menschen verschiedene Teile schrieb, ohne zu denken sehr viel , wie sie im Begriff waren, verwendet werden - eher lückenhaft. Und es kamen zusammen, so, und es ist immer noch so in mancher Hinsicht. Damit spiegelt die Geschichte, und es gibt immer noch diese Widersprüche und ungeraden Elemente davon. Okay. Weiter hier. Wie ich bereits schrieb, die C-Shell ist nicht wirklich sehr viel für die Programmierung, Obwohl es sein kann. Er führt langsamer, wieder die Trade-off zwischen interaktive Nutzung, die weitere Verarbeitung beteiligt als Geschwindigkeit hat, die ohne die Verarbeitung zu tun. Die zusätzlichen Funktionen für die Bourne-Shell von der Korn-und Bourne-Shells wieder aufgenommen scheinen nicht, um sie zu verlangsamen, und ich weiß nicht, warum das so ist. Es könnte nur besser sein, Programmierung, aber ich bin nicht in der Lage zu wissen. Beschleunigen hier ist eigentlich nicht so eine große Sache, auch wenn es erwähnt wird. Der Grund ist, dass Shell-Skripte tatsächlich ziemlich schnell. Wenn es eine Menge von Befehlen, wie in einer Rechenprogramm, Sie würde wahrscheinlich nicht tun es in einem Shell-Skript. Die Operationen sind recht einfach und unkompliziert. Die, die ich erlebt habe, die zu langsam sind beinhalten wiederholte Anwendungen von langsamen Befehlen. Früher habe ich erwähnt das Stream-Editor sed. Dieser Befehl ist langsam. Wenn Sie sed viele Male ausführen, werden Sie eine langsame Skript zu bekommen, aber es ist nicht die Schale, die langsam ist. Laufen in der Bourne-Shell wird nicht viel schneller als in der C-Shell läuft es sein, obwohl es vielleicht einige Vorteile gibt. Die zusätzlichen Programmiermöglichkeiten, auf der anderen Seite, sind wichtige Gründe, warum Sie die Bourne-artige Shells verwenden würden. C-Shell hat ungerade Funktionen, die es - die Tatsache, dass Sie nicht wissen, ob eine Variable eine Shell-Variable oder eine Umgebungsvariable. Es kann sehr verwirrend sein. Es ist nicht so einfach zu schreiben nur auf dem Programmiererfahrung in anderen Sprachen basiert. Ich glaube, Sie die Bourne-artige Shells mehr im Einklang mit Ihrer Erfahrung finden. Einige Skripte, obwohl, können Tausende von Zeilen lang sein. Diejenigen, die ich gesehen habe, sind für das Patchen Betriebssystemen. Diese können sehr langsam ausführen, aber Sie laufen nicht die sehr oft. Es ist nur, wenn Sie Patchen tust, und es ist nur der Systemmanager, der diese Dinge tut, so ist es nicht wirklich viel von einem Problem. Diejenigen, die Hunderte von Zeilen lang sind eigentlich ziemlich schnell auszuführen. In denen dieses hier, was sind die Verbesserungen? Arrays, Berechnungen, - ich habe schon ein paar von ihnen genannten die $ ()-Ausdruck für Berechnungen in der Bash-Shell, die andere Art von Kommando-Substitution. Es gibt verschiedene Arten von Testbefehlen , mit denen Sie bedingte Tests auf der Existenz einer Datei oder andere Dinge tun können. Zuletzt hier, dieser Befehl hier. Was hat das zu tun, und warum sollte jemand es nutzen? printenv Variablen. Wir wissen, was printenv tut. Es sagt uns, den Wert einer Variablen. Und printenv Variablen wird uns nicht sagen, sehr gut, da gibt es keine solche Variable. Blank. Aber versuchen wir es etwas Sinnvolles. Das ist auch nicht da. Okay. Ich glaube, ich nie definiert, dass. Lassen Sie uns nur meine Umwelt. Dies ist ein weiterer Befehl, mit dem Sie Ihre Umgebung zu inspizieren. Es ist gute alte HERAUSGEBER, die, die wir zuvor gesehen. Was bedeutet das? Hier haben wir eine Backquote Ausdruck. Denken Sie daran, dies ist der C-Shell. So printenv HERAUSGEBER wird uns einen Wert von Editor. Es ist vi. Und dann wird es den Wert der Variablen a, der Befehl set gesetzt. So jetzt, wenn ich echo $ ein, bekomme ich vi. Das scheint nicht besonders nützlich. Allerdings ist es tatsächlich einen Zweck haben. Da wir nicht wissen, ob eine Variable eine Shell-Variable oder eine Umgebungsvariable indem Sie die Dollar-Zeichen Auswertung Syntax können wir printenv verwenden um sicherzustellen, dass es ist eine Umgebungsvariable. Also, wenn es eine Shell-Variable Editor, würde es nicht bekommen haben. Dies funktioniert nur mit der Umgebungsvariablen. Wenn es eine Shell-Variable und ich wollte seinen Wert, Ich hätte einen anderen Weg, es zu tun. Eine Möglichkeit, dies zu tun würde, indem Sie Satz und Rohrleitungen sein. Dies ist einer der Metazeichen Sonderzeichen. Es sendet die Ausgabe von Set zu etwas anderem. Mal sehen, was wir dort finden. Nichts. Okay. Mal sehen, was da drin ist alles zusammen. Es war echo_style, die, die ich bereits erwähnt habe. Okay, lasst uns das tun. Denken Sie daran, ich schon erwähnt, echo_style bestimmt die Art und Weise der Echo-Befehl ausgeführt wird. BSD steht für Berkeley Standard Auslieferungs. Dies ist der Berkeley-Unix aus den 1970er Jahren. Das ist eine der Möglichkeiten, die können laufen Echo. Einstellen echo_style zu diesem Wert in der TC-Shell verursachen Echo auf diese Weise zu verhalten. So machte das tut, sondern nur eingestellt werden, bekommt Shell-Variablen. Es wäre nicht zu finden HERAUSGEBER, die nicht eine Shell-Variable. Nichts. Also das ist eine Möglichkeit, sie zu unterscheiden. Aber die Tatsache, dass Sie haben, um durch einige seltsame Befehl, wie das gehen zwischen Shell-Variablen oder Umgebungsvariablen unterscheiden zeigt die Art unpraktisch Natur der C-Shell für einige Zwecke. Und jetzt, letzte und vielleicht Dest ist dies die man-Seiten. Diejenigen, die Sie vielleicht wissen, ist der Mann, der Befehl für Kurzanleitung. Die man-Seiten für die Schalen sind schwer zu lesen. Sie sind sehr lang. Sie sind in einer Weise, die es schwierig machen kann zu finden, was Sie suchen organisiert. Also, wenn Sie nach etwas mit einem Ziel suchen, Sie können nicht wissen, ob dieser Zweck ist ein Shell-Variable oder etwas anderes, so können Sie nicht wissen, wo es zu suchen. Sie können für verschiedene Strings suchen, aber die Saiten werden oft wiederholt. So ist es in der Regel schwer zu lesen. Wir sind gerade auf der TC-Shell-man-Seite sah ein wenig vor, um den Befehl eval finden. Manche Dinge gehen schneller. Ein Ansatz ist, nach einer Zeichenfolge zu suchen. Sie können die Pager. Pager hat den Schrägstrich, für einen Befehl oder eine Zeichenkette in einer Pager-Betrieb zu suchen. Man wird standardmäßig Pager verwenden, entweder mehr oder weniger. Ich weiß nicht, ob man mit denen nicht vertraut sind, aber die, können die Dateien nach und nach zeigen. Ich habe mit LESS, um diese insbesondere Dateien, die wir hier haben, anzuzeigen. Sie können drinnen suchen. Sie können versuchen, mit verschiedenen Suchbegriffe. Auch der Mensch Seiten in verschiedenen Betriebssysteme können nicht die gleichen sein. Sie können separate Seiten für csh und tcsh sein. Sie sind nicht auf dem Mac, aber sie könnte, wenn die getrennte Befehle. Wenn sh nicht wirklich Bash nennen, hätte es wahrscheinlich eine separate man-Seite sein. Einige Systeme haben getrennte man-Seiten nur für die C-Shell integrierte Befehle. Manchmal, wenn Sie eine Beschreibung eines integrierten Befehl lesen wollen das ist auch auf dem Weg, wie Echo, um die man-Seite zu diesem Befehl auf Echo zu lesen müssen Sie zu bestimmen, wie sie als eingebauten Befehl zu arbeiten auch wenn Sie nicht den Aufruf der eingebauten Befehl. Das ist ein Nachteil des Betriebssystems in der Regel nicht nur für die Schalen, obwohl für die Schalen insbesondere die man-Seiten sind ziemlich lang, teils, weil sie nützliche Features, um sie hinzugefügt haben, ist ein positiver sein können. Okay. Gibt es irgendwelche Fragen? Alle Themen, die Sie einbringen möchten? Alles, was hier relevant? Nun, es war sehr schön mit dir zu reden alle. Ich hoffe, dass Sie aus diesem Seminar hat etwas das wird in der Zukunft alles nützlich sein. [CS50.TV]