ANLEITUNG FÜR CSHELL VERSION 5.19 1991 ======================================= Inhalt ------ O Installation I Beschreibung II Übersicht der Haupteigenschaften III Einschränkungen IV Pipes V Präprozessor VI Kommandozeilen-Editierung VII Funktionstasten VIII Shell Kommandos IX Spezielle Variablen X Funktionen XI Diverses XII Beispiel-Stapeldateien XIII Vorgabewerte XIV Objektorientierte Eigenschaften XV Tastaturbelegungen O Installation -------------- Die CSH kann ganz einfach von der CLI-Kommandozeile aufgerufen werden, weil die CSH aus der Sicht von AmigaDOS keine richtige Shell wie l:Shell-Seg ist, sondern ein ganz normales Programm. Jedoch ist CShell 'pure', falls also der LHarc vergessen hat, das 'p'-Bit zu setzen, sollte es bitte gleich jetzt gesetzt werden ("protect Csh +p"). Endgültige Installation: Die Csh soll die AmigaShell komplett ersetzen, dazu sollte Csh gleich von Anfang an resident sein, dafür bitte wie folgt verfahren: Kickstart 1.3 1. CSH irgendwohin auf die Harddisk oder Diskette kopieren, z.B. dh1:tools 2. Nun s:startup-sequence um das Folgende ergänzen: Resident CLI L:Shell-Seg SYSTEM PURE ADD Resident dh1:tools/Csh ADD NewShell FROM s:Csh-startup EndCLI 3. Die Datei s:Csh-startup erstellen, die das folgendes enthält: Stack 8000 Csh -r s:firstlogin.sh 4. In die Datei s:firstlogin.sh alle Kommandos schreiben, welche nur nur einmal aufgerufen werden sollen, etwa setmap, assign und setclock. Dies wird eine Csh-Stapeldatei, bitte # als Kommentarzeichen verweden und keine Punkt-Kommandos wie .key. Am Ende dieser Datei soll stehen: source s:login.sh 5. In der Datei s:login.sh stehen alle Kommandos, die für jedes neue Shell-Window wieder ausgeführt werden sollen, z.B. alle 'alias' und 'set' Kommandos. 6. Und das Folgende sollte in der Datei s:shell-startup stehen, damit beim Kommando NewShell oder von der Workbench her gleich eine Csh erscheint: Csh s:login.sh Achtung, alle danach folgenden Befehle werden erst dann ausgeführt, wenn die Csh beendet wird ! Kickstart 2.0 1. CSH irgendwohin auf die Harddisk oder Diskette kopieren, z.B. dh1:tools 2. Nun s:startup-sequence bzw. s:user-startup um das Folgende ergänzen: Stack 8000 Resident dh1:tools/Csh ADD Csh s:firstlogin.sh 3. Bitte nun weiter bei Schritt 4 bzgl. Kickstart 1.3 Zusätzlich ist es empfehlenswert, CSH: irgendwohin zu 'assign'en, und Csh.doc und alle Stapeldateien dorthin kopieren. Also etwa: assign CSH: dh1:tools Ein generelles Installationsprogramm gibt es z.Z. nicht. Es ist auch ziemlich schwierig auf alle denkbaren Fälle von Konfigurationen und Sonderwünschen einzugehen. Der obig beschriebene Ablauf ist nur einmal zu erledigen, jedes Update der Csh selber, betrifft normalerweise nur die CSH selber, die vorliegende Anleitung und die Stapeldateien, nicht aber die Art und Weise wie Cshell gestartet wird. Sollte dies denn doch der Fall sein, bitte auf jeden Fall die hier beschriebene Prozedur durchlesen! I Beschreibung -------------- Diese Version von CShell ist der Nachfolger von: Shell V2.04 (C)Copyright 1986, Matthew Dillon, All Rights Reserved Shell V2.04M-V2.07M by Steve Drew Shell V2.08MI, V3.xxA and V4.xxA by Carlo Borreo & Cesare Dieni Shell V5.xxL by U. Dominik Mueller Irgendwelche Wünsche, Fehlermeldungen, Bierflaschen oder Bugreports, sind bitte an folgende Adressen zu senden: FIDONET : Urban Mueller@2:302/906 (AUGL BBS) INTERNET: umueller@iiic.ethz.ch oder U. D. Müller Schulhausstrasse 83 CH-6312 Steinhausen SWITZERLAND Jedes Zeichen intelligenten Lebens ist willkommen. ('Scott me up Beamie, no intelligent lifeform down here...') Bitte auch zuerst die Kapitel 'Einschränkungen' und 'Bekannte Fehler', lesen, bevor eine Fehler gemeldet wird. Die Support-Mailbox ist AUGL, +41 75 8 20 19, +41 75 8 20 18, +41 75 2 15 87 (alle Leitungen USRobotics HST) login='cshell',passwort='support'. Bitte auch die Datei 'feedback.doc' lesen und wenn möglich abschicken. Wenn es um Versionen vor 5.00 geht, bitte an wenden Carlo Borrea oder Cesare Dieni wenden: BITNET: PERUGIA@ICNUCEVM.BITNET FIDONET: 2:332/602.0@FIDONET oder Carlo Borreo Cesare Dieni Via G. Berio 34 Via G. Taddei 3 I-18100 Imperia I-56100 Pisa Italy Italy CShell darf nur unverändert und nicht gegen Profit verbreitet werden. *** VERBREITEN SIE NIE VERÄNDERTE VERSIONEN VON CSHELL *** Wenn jeder eigene Versionen schreibt und weitergibt, würden wir innerhalb kürzester Zeit in Shell-Versionen begraben. Wenn eine Änderung an der Shell gemacht wurde, und diese anderen Benutzern zur Verfügung gestellt werden soll, dann sollte eine DIFF-Ausgabe oder eine Beschreibung dessen was geändert wurde an den Autor geschickt werden. EHRENHALLE ---------- Vielen Dank an alle Leute, die mir Feedback und Hilfestellung gegeben haben, namentlich Eddy Carroll, Patrizio Rusconi, Allard Siemelink, Magnus Heldestad, Roddi Walker, Roy Haverman, Steve Koren, Randell Jesup, Peter Orbaek und der unbekannte Schwede, der für mich den 2-LF-Bug gefunden hat. Besonderer Dank gilt den Übersetzern dieses Dokuments: Roy Haverman, Jörg-Cyril Hoehle, Martin Horneffer, Hans-Christian Huerlimann, Markus Illenseer, Daniel Pfulg, Patrizio Rusconi, Christian Schneider, und mir selber... Diese Version der Anleitung wurde von Markus Illenseer durch Entfernung grausamer Rechtschreibfehler, unglücklicher Übersetzungen und wilder Stilentartungen aus der deutschen Ur-Version erstellt. :-) Flammen, Lexika, Duden, Weinflaschen bitte an markus@techfak.uni-bielefeld.de senden. II ÜBERSICHT ------------- CShell bietet eine bequeme Alternative zu den AmigaDOS Befehlen. Alle Kommandos sind eingebaut und brauchen deshalb keine zusätzlichen Kommandos im c: Ordner. Die wichtigsten Möglichkeiten: - Frei programmierbare Kommandozeilen-Eingabe - Kommandospeicher (die letzten 50 Kommandos werden gespeichert) - Pipes (Ein- und Ausgabeumleitung) - Aliase mit Argumenten - Variablen - Suchmuster (* und ? für Dateinamen) - Bedingte Anweisungen (if, else, endif) - Stapeldateien - Dateinnamen-Vervollständigung mit TAB - Objektorientierte Möglichkeiten, Dateiklassen und Operationen. - Viele eingebaute Kommandos zur Beschleunigung der Ausführung - Volle Funktionalität auf VT-Terminals Eine Übereinstimmung mit der unter UNIX (tm) weit verbreiteten CSH, TCSH oder RC ist nicht ungewollt aber kann z.Z. nicht in allen Bereichen erreicht werden (z.B. Jobhandling), wird durch das Klassenprinzip aber deutlich verbessert. CShell läuft mit minimalem Stack (4 KBytes), aber für kompliziertere Aliase und Stapeldateien sollte der Stack auf 8K erhöht werden bevor die CShell startet. Wird die CShell zum ersten Mal benutzet, bitte folgendes beachten: - Die eingebauten Kommandos müssen in Kleinschrift eingegeben werden, und können z.T. abgekürzt werden. - Das Kommando 'c:Execute' kann nicht umgeleitet werden. AmigaDOS Stapeldateien können weiterhin mit 'source' ausgeführt werden, sofern jene keine .-Kommandos wie .key enthalten. - Jederzeit Auskunft über ein gewünschtes CShell-Kommando erhältlich, mittels 'man '. III Einschränkungen ------------------- Der folgende Fehler betrifft nur V36 von Kickstart 2.0: Die internen Kommandos können nicht gestartet werden. Dasselbe gilt für Kommandos in C:, wenn diese mit dem AmigaDOS 'Resident' Kommando resident gemacht wurden. Mit Csh's 'resident' funktionieren solche. Deshalb sollten die internen Residents nicht verwendet werden. Dies kann mit dem Start-Schalter -i0 erreicht werden, wenn Kickstart V36 verwendet wird. Unter Kickstart 1.3, können AmigaDos-Residents nicht direkt gestartet werden. Dies kann durch die Option -r verbessert. Diese kopiert die AmigaDOS Resident Liste einmalig in die ARP-Resident-Liste (Diese Residents können nicht mehr entfernt werden). Es wird versucht, eine bessere Lösung zu finden. Die beste Lösung unter beiden Kickstarts ist es, nur Csh selber AmigaDOS resident zu installieren, und alle anderen Kommandos, wenn vorhanden, nur ARP resident zu installieren. Unter 1.3 kann die Shell (wie auch alle anderen Kommandos) nur von der Resident-Liste gestartet werden, wenn vorher das Kommando 'resident CLI l:Shell-seg' und 'newcli' eingegeben wurden. Das c:Execute Kommando kann nicht umgeleitet werden, es setzt keinen Return- Kode und verursacht unter Umständen andere Probleme. Es arbeitet überhaupt nicht mehr wenn es einen anderen Namen hat. Der VDK: Handler und Frank Seidel's BootRam-Handler haben einen Fehler beim setzen des Datei Datums. Soll das copy Kommando gebraucht werden, sollten die Option -d und -p verwendt werden, sonst kann es sein das das Datum fehlerhaft ist. (Das ist kein Shell Fehler) Wenn Csh mit Conman verwendet wird kann in Betracht gezogen werden, Csh mit der Option -a zu starten. Dies schaltet die Csh-Editier-Funktionen in der Kommandozeile aus, statt dessen werden die des Conmans benutzt. Aber dadurch gehen viele Csh Möglichkeiten verloren, wie z.B. die Dateinamen-Vervollständigung. CB-Handler (ein Tool das im CLI Window eine Scrollbar installiert) ist nicht 100% kompatibel zu Csh. Der Inhalt des CB-Handlers-Logs stimmt nicht immer mit dem tatsächlichen Screen-Inhalt überein. IV. BEMERKUNGEN ZU DEN PIPES ---------------------------- PIPES PIPES benutzen TemporärDateis im Ordner t:. Bitte vorsichtig mit Suchmustern wie 't:*' da diese auch die Temporärdateien betreffen könnten. Die Temporärdateien werden nach dem Beenden des Pipe Segment gelöscht. Die benutzen Dateinamen sind einmalig, selbst wenn mehrere Shell's nebeneinander laufen. Von nun an ist es auch möglich, interne Kommandos mittles Pipe in ihren Ein- und Ausgaben zu steuern. z.B. 'echo charlie >ram:x' oder 'echo "echo mem | Csh" | Csh' Kein BCPL Programm sollte mit Output-Append '>>' umgeleitet werden. V. KOMMANDO PRÄPROZESSOR -------------------------- PRÄPROZESSING Präprozessing wird in der Kommandozeile ausgeführt, bevor diese an interne oder externe Routinen weitergegeben wird. ^c Wobei c ein Zeichen ist, daß in ein Kontroll Zeichen gewandelt wird. z.B. '^l' steht für Control-l. \233 Fügt das Zeichen mit dem oktalen Kode 233 ein. Keine Werte zwischen 200o und 232o benutzen, da diese spezielle Bedeutung haben. \240 ist der Wort Seperator. (Ein \ ) $Name Wobei Name ein variabler Name ist. Variablennamen können aus den folgenden Zeichen bestehen: 0-9, a-z, A-Z und dem Unterstrich '_'. Der Inhalt der spezifizierten Variablen wird gebraucht. Falls die Variable nicht existiert, wird der Name selber eingesetzt. z.B. Wenn die Variable 'i' 'Charlie' enthält, dann ist '$i' -> 'Charlie' Wenn die Variable aber nicht existiert dann bleibt '$i' -> '$i'. ; Trennt Kommandos. 'echo charlie ; echo ben.' So können mehrere Kommandos auf eine Zeile geschrieben werden. ' ' (ein Leerzeichen). Leerzeichen trennen Argumente. "Zeichenkette" ein in Anführungszeichen stehende Zeichenkette. Das schliessende Anführungszeichen muss nicht gesetzt werden. z.B. Sollen fünf Leerzeichen und ein 'a' ausgeben werden: echo a -> a echo " a -> a \c Verhindert den Inhalt eines Spezialzeichens. '\^a' ist ein Circumflex und ein a und kein Control-A. Ein Backslash wird wie folgt geschrieben: '\\' . Dies wird ebenso benutzt, um das Suchen nach Aliases zu unterbinden. >Datei Spezifiziert Ausgaben Umleitung. Die Ausgabe des Kommandos wird in die spezifizierte Datei geschrieben. >>Datei Spezifiziert Ausgaben Umleitung. Die Ausgabe wird an eine bestehende Datei angehängt. (Arbeitet nicht mit BCPL Programmen). ist eine Zahl). Fügt das Kommando aus dem Kommando-Speicher Nummer ein. Siehe HISTORY Kommando. !teil Sucht rückwärts durch den Kommando-Speicher nach einem Kommando das gleich beginnt wie , und führt dieses aus. # Kommentar. Der Rest der Zeile wird übergangen. Beachte: \# hebt die spezielle Wirkung des '#'-Zeichens auf. {e hi;e ho} Führt zwei Kommandos wie eines aus, so dass sie umgeleitet werden können. (Siehe ALIAS Kommando). Die schliessende geschweifte Klammer muss nicht geschrieben werden. $(fasel) Fügt die Ausgabe des Kommandos 'fasel' an dessen Position in der Kommandozeile ein. Jede Zeile der Ausgabe gilt als ein Argument. Die schliessende Klammer ist optional. 'fasel' Fügt die Ausgabe des Kommandos 'fasel' an dessen Position in der Kommandozeile ein. Jedes Wort der Ausgabe gilt als ein Argument. Mehrere Leerzeichen werden entfernt. Die schliessende Klammer ist optional. Achtung, den Unterschied zwischen folgendem bemerken: alias count {echo eins;echo zwei} alias count "echo eins;echo zwei Die erste Form schafft ein Alias, welches ein lokales Alias ent- hält, während die 2. ein normales Alias generiert. Auch werden Zeichen in geschweiften Klammern nur einmal interpretiert, sodass nicht für jedes Spezialzeichen wieder einen Backslash gebraucht wird. Darum sehen die Kommandos in geschweiften Klammern so aus als wenn sie auf der Kommandozeile eingetippt würden. Beispiel: forever {echo \# forever "echo \\\# Ein Block kann sich über mehrere Zeilen ausdehnen. Siehe 'source' Kommando. VI. KOMMANDO ZEILEN EDITIEREN ----------------------------- Die Kommandozeile kann bis zu 255 Zeichen lang sein. Einfügungen und Löschungen funktionieren auch über mehrere Zeilen. Die Stapeldatei 'menu.sh' installiert ein Intuition Menu das die meisten Editierfunktionen enthält. EDITIEREN -- CURSOR BEWEGEN-- Pfeil Links Ein Zeichen nach Links Pfeil Rechts Ein Zeichen nach Rechts Shift-Pfeil Links Ein Wort nach Links Shift-Pfeil Rechts Ein Wort nach Rechts ESC-Pfeil Links Gehe zum Beginn der Zeile (^A) (^Z) ESC-Pfeil Rechts Gehe zum Ende der Zeile (^E) -- LOESCHEN -- Backspace Zeichen Links des Cursors Del Zeichen Unter dem Cursor ESC-Backspace Wort Links des Cursors (^W) ESC-Del Wort Rechts des Cursors ESC-x-Backspace Bis zum Beginn der Zeile (^B) ESC-x-Del Bis zum Ende der Zeile (^K) ESC-d Die gesammte Zeile (^X) -- KOMMANDO-SPEICHER -- Pfeil aufwärts Im Kommando-Speicher ein Kommando nach oben Pfeil abwärts Im Kommando-Speicher ein Kommando nach unten Shift-Pfeil aufwärts Erstes Kommando im Kommando-Speicher das 'passt' Shift-Pfeil abwärts Geht zum Ende des Kommando-Speichers ESC-Pfeil aufwärts Geht zum Beginn des Kommando-Speichers ESC-Pfeil abwärts Geht zum Ende der Kommando-Speichers ESC-! Holt Kommando von einem schon eingegebenen Teil aus Kommando-Speicher ^T Fügt die letzte Zeile ein, ausser dem ersten Wort ^P Kopiere vorhergehendes Wort. (Nützlich für mv) -- DATEINAMEN VERVOLLSTAENDIGUNG -- TAB Fügt den ersten passenden Dateinamen ein Shift-TAB Fügt längsten passenden gemeinsamen Dateinamen ein ESC-TAB Fügt alle Dateinamen ein die passen.(Auch ESC-*) ESC-c Quick-CD mit Wort links des Cursors (TAB -> Cycling) ESC-~ Fügt den letzen Ordner ein ^D Zeigt alle Dateien die dem Muster einsprechen (Auch ESC-=) -- ZEILE AUSFUEHREN-- Return Führt Zeile aus ESC-Return Führt akt. Zeile des Kommando-Speichers aus und zeigt nächste ^N Speichert aktuelle Kommandozeile und geht zur nächsten ^\ EOF (Csh wird abgebrochen) -- VERSCHIEDENES -- ^L Schreibe die momentane Zeile nochmals. ^O Echo ^O ^R Wiederhole letztes Editierkommando ^U Letzten Editierbefehl Rückgängig machen ESC-i Umschalten Einfüge/Überschreibemodus f1-f10 Führe Kommando aus wenn Variable existiert. F1-F10 Noch mehr Kommandos (Geshiftete f Tasten). Help Führt help Kommando aus. Wenn der Cursor auf oder direkt hinter einem noch nicht kompletten Dateinamen steht und die TAB Taste gedrückt wird, setzt Cshell den ersten Dateinamen (alphabethisch sortiert) ein, der dem teilweise geschreibenen Namen entspricht. Alle Wildcards sind hier erlaubt. Wenn keine gegeben sind, wird automatisch ein '*' angehängt. Durch wiederholtes Drücken der TAB Taste kann durch eine Liste aller Dateien gegangen werden, die dem nicht kompletten Dateinamen entsprechen. Shift-Tab fügt nur jenen Teil der Zeichenkette ein, der allen gefundenen Namen gemeinsam ist. ESC-Tab fügt den Namen des Ordners ein, in den gewechselt würde, wenn mit dem aktuellen Teil der Zeichenkette ein Quick-CD ausführt würde. Achtung, ^D ermöglicht jetzt das Verlassen der Stapeldateien wie unter AmigaDOS, oder Ordner anzeigt ohne Csh zu verlassen. Soll alles beim Alten belassen werden, sollte ein 'keymap 0 4=41' ausgeführt werden. Die Ctrl-F,Ctrl-G,Ctrl-V und die Ctrl-Y Kombination sind unbesetzt. Diese können beliebig belegt werden (siehe Kapitel XV). Auch alle voreingestellten Kombinationen können neu belegt werden. VII. FUNKTIONSTASTEN -------------------- Funktionstasten setzen jetzt Text an der aktuellen Position der Kommandozeile ein. Der Text kann mit einem '^M' terminiert werden, was einem entspricht und damit das Kommando sogleich in der Kommandozeile ausführt. 'f1' bedeutet Funktionstaste ohne Shift, 'F1' mit Shift. Die meisten Funktionstasten haben eine Voreinstellung, aber kann diese natürlich auch anders definiert werden. $ set f1 dir df0:^M würde den Text 'set f1 dir df0:' auf die Kommandozeile hinzufügen und danach noch ausführen. $ set f1 dir würde den Text 'dir' auf die Kommandozeile hinzufügen worauf der Benutzer dann z.B. ' df0:' eingeben kann. VIII. SHELLKOMMANDOS -------------------- START OPTIONEN Zuerst die Shell vom CLI aus starten: Csh [-abcfiknstv] [-c Kommando;..;KommandoN] Csh [-abcfiknstv] [Stapeldatei1 ... StapeldateiN] -a AUX: Modus. Kein Kommandozeilen-Editieren und Text-Markierung. -b Startet Shell im Hintergrund, was heisst, nur Task Priorität -1. -c Erlaubt Ausführung EINER Kommandozeile und verlässt Shell gleich wieder. Nützlich um Shellkommandos im Hintergrund oder von einer externen Applikation aus auszuführen. Bsp.: Run Csh -c "dir df0:; copy -r df0: df1: >nil:; echo Done" -f Startet Shell im Vordergrund, was heisst, Task Priorität 1. Diese Priorität kann wieder auf 0 gesetzt werden am Ende der .login Datei -i0 Keine INTERNEN residents. Für V36 Kickstarts. -k Setzt _nobreak bevor irgendwas getan wird. -n Unterdrückt starten von s:.login -r Kopiert die AmigaDOS resident list zur ARP resident list. Diese kann nicht mehr entfernet werden. Kein Kopieren unter Kick 2.0 oder wenn ARP residents existieren. -s Erlaubt global den Stern '*' anstatt '#?' in AmigaDOS 2.0 -t Terminal Modus. Es ist möglich an einem VT100-kompatiblen Terminal Kommandozeilen zu editieren sowie auch Text- Markierung zu betreiben. Backspace und DEL Austausch wird mit dem 'keymap'-Kommando bewerkstelligt. -v setzt _verbose zu 'hs' bevor irgendwas getan wird. Unter 1.3 ist es wohl am Besten Csh mit dem AmigaDOS Kommando Resident in der s:startup-sequence resident zu machen und dann mit der Option -r zu starten. Auf diese weise kannst du eine weitere residente Csh aus der Csh heraus starten. BEACHTE: Residents, die mit -r kopiert wurden können nicht mehr entfernt werden! Es ist ratsam für alles andere ausser Csh das interne resident Kommando zu nutzen. KOMMANDOAUSFüHRUNG Interne Shellkommandos unterscheiden Gross- und Kleinschreibung und können abgekürzt werden. Das erste Argument ist der Kommandoname... schauen wir uns mal an wie die Shell versucht, es auszuführen: 1) Die Alias Liste wird nach dem exakt passenden Muster, das vorgegeben wurde, durchsucht. 2) Die interne Kommando-Liste wird nach einem teilweise passenden Muster abgesucht (z.B. 'resi' anstatt 'resident'). Jedenfalls sollte das Muster genügend beinhalten, damit das Kommando auch einmalig ist. 3) Danach wird die Funktions-Liste nach dem exakt passenden Muster abgesucht. Wenn eine gefunden wird, dann wird dessen Resultat auf die Standard-Ausgabe ausgegeben. 4) Jetzt nimmt die Shell an, dass es sich um ein externes Kommando handelt. Argumente mit Freizeichen, Strichpunkten oder leeren Zeichenketten werden mit Anführungs- und Schlusszeichen umrahmt. (Wichtig!) 5) Falls es sich um ein Ordner handelt, wird ein 'cd ' ausgeführt. 6) Die AmigaDOS und ARP resident list werden abgesucht (Es ist 'resident' von der Shell zu benützen, um eine Datei in der ARP Liste hinzufügen; entfernen mit add/remove). 7) Wenn die Datei im aktuellen Ordner ist,und auch ausführbar ist, dann wird sie als Programm gestartet. 8) Es wird im AmigaDOS path (Pfad) und c: (Achtung, Path auf C: erweitert, funktioniert nicht unter 2.0. Dazu 'path' verwenden). 9) Jetzt wird der Shell Pfad ($_path) abgesucht. Wenn das Kommando dort gefunden wird, und ausführbar ist, wird es gestartet. Wenn das 's'-Bit gesetzt ist, wird es unter der zugewiesenen Shell ausgeführt. Siehe FREMDE SHELLS. 10) Wenn eine Datei existiert mit Endung '.sh' und denselben Basisnamen im aktuellen Ordner oder im Shell Pfad, dann wird sie mit dem Shellkommando 'source' ausgeführt. 11) Als nächstes wird die Variable _rxpath untersucht. Wenn dort eine Datei mit der Endung '.rexx' existiert und denselben Basisnamen im aktuellen Ordner oder im '$_rxpath', dann wird sie mit dem Arexxkommando 'RX ' ausgeführt. 12) Wenn bis hierhin nichts gefunden wurde, wird der Datei ein 'exec'- Kommando geschickt. Siehe Kapitel XIV für weitere Infos über Klassen und Aktionen. Um zu erzwingen, dass ein externes 'dir'-Kommando gestartet wird, muß 'Dir' eingeben werden. Es wäre eine gute Angewohnheit alle externen Kommandos mit einem grossgeschriebenen Erstbuchstaben aufzurufen, obwohl es nicht notwendig ist. AUTOMATISCHES SOURCING Sourcing (=Ausführen von Stapeldateien) kann erreicht werden indem die Stapeldatei mit der Endung '.sh' aufgerufen wird. Also, wenn 'Quell' aufgerufen wird, und die Datei 'Quell.sh' im aktuellen Ordner oder im Shell Pfad existiert (BEACHTEN SIE: NICHT im AmigaDOS Pfad), dann wird sie mit dem 'source' Kommando mit allen Argumenten, die in der Variable $_passed platziert wurden, ausgeführt. Das wäre dasselbe, als würde 'source Quelle.sh' eingeben werden. FREMDE SHELLS Werden unterstützt durch Schlüsselzeichen zu Beginn dieser Stapeldateien. Wenn eine Datei im $_path ein s-bit hat, werden die ersten paar Zeichen gelesen. Wenn die ersten zwei Zeichen '/*', '#!' oder ';!' seien sollten, wird der Rest der ersten Zeile als der Name der Shell interpretiert, die das Skript ausführen soll. Wenn diese magischen Zeichen fehlen, wird c:Execute benutzt. Beispiele: /*RX /* Eine Arexx-Stapeldatei */ #!SKsh -c source # Eine SKsh-Stapeldatei mit Argument SUCHMUSTER Die meisten Shellkommandos werden mehrere Argumente, die das Resultat einer Suchmuster Ergänzung sind, akzeptieren. Auch wenn ein externes Kommando aufgerufen wird, wird die Shell zuerst die Suchmuster Ergänzung zu einzelnen Argumenten separieren. Wird ein externes Kommando mit eigener Suchmuster Ergänzung verlangt, ist es sinnvoll, Anführungszeichen um das spezielle Suchmuster zu setzen, oder ein Alias zu benützen (siehe Erklärung von 'alias'). Beispiele: arc a new.arc *.txt #die Shell wird Ergänzungen zu arc schicken. arc a new.arc "*.txt" #arc soll die Suchmuster selber expandieren. alias arc "*a Arc $a" #nun wird die Shell nie ergänzen. Erlaubte Suchmuster: ? Zu irgendeinem (1) Zeichen passend. * Zu irgendeiner Zeichenkette passend. (Beliebig lang!) .../* Rekursiv suchen in alle Unterordner hinunter vom aktuellen Ordner ausgehend. ~ Ausschluss der Suchmusterspezifikation. ! Gleichbedeutend zu '~'. Wird aus Kompatibilitätsgründen unterstützt. & Kommt als Prefix vor das Muster, fragt Bestätigung für jede Datei ab. [] Zeichenklasse. [a-c] läßt die Zeichen a, b und c zu. ~ Der vorherige aktuelle Ordner (sofern das ~ abgesondert dasteht). BEACHTE: Das Muster muss ein '?' oder ein '*' enthalten, sonst wird es nicht als solches betrachtet. Auch ein einzelnes '?' als Muster im ersten Argument eines Kommandos kann nicht ergänzt werden, da dies an das Kommando weitergegeben wird, damit dieses Kommando eine Kurzanleitung von sich selbst ausgibt (Help-Funktion der internen Kommandos). Hier einige Beispiele für Suchmuster, um das Oben gesagte besser zu illustrieren: df0:.../* Alle Dateien in allen Ordnern von df0: df0:.../!*.info Alle Dateien von df0: aber OHNE Dateien mit der Endung '.info' !*.o !*.c Alle Dateien im aktuellen Ordnern ausser solche mit Endung '.o' oder '.c' df1:&* Alle Dateien in df1:, aber Bestätigung durch Abfrage *.[co] Alle Dateien mit Endung '.c' oder '.o' ~*.[co] Alle Dateien ohne Endung '.c' oder '.o' ~ Vorheriger aktueller Ordner ~/*.c Alle '.c'-Dateien im vorherigen aktuellen Ordner ~// Das Vaterordner vom vorherigen aktuellen Ordner . Das aktuelle Ordner ./fasel.c Gleichbedeutend mit fasel.c .. Der Vaterordner vom aktuellen Ordner ../fasel.c Die Datei fasel.c im Vaterordner Achtung, einige Kommandos verhindern Suchmuster Ergänzung: dir, rpn, whereis und window. Diese Kommandos werden die Suchmuster selber erweitern. Darum wird auch dir @without( *.? , *.o ) nicht funktionieren. Anstelle dessen ist zu benutzen: set arg @without( *.? , *.o );dir $arg Es gibt eine Ausnahme in den Regeln oben: Ein einzelnes '?' als erstes Argument wird nicht erweitert. Stattdessen erlaubt es eine Anzeige des Kommandohilfstextes. Folgende Symbole werden noch nicht unterstützt durch Suchmuster Ergänzung, werden aber von 'search -w' und '@match()' akzeptiert: ( | ) mit OR suchen (OR=logisches ODER) # einmal oder mehrmals das unmittelbar folgende Zeichen nach # Beispiele: "k#a" passt zu: ka, kaa, kaaa, etc. "hel(lo|p)" passt zu: hello oder help. VIII Shell Kommandos -------------------- ABORTLINE Gebrauch: abortline Beispiel: echo a; abort; echo b Ergebnis: a Verhindert, daß der Rest der Zeile ausgeführt wird. Wird üblicherweise im Zusammenhang mit der Ausnahme-Behandlung verwendet. ACTION Gebrauch: action [-a] Methodenname Datei [Argumente] Wendet eine Methode auf ein Datei an. Optionen: -a (abort) Es wird 0 bei Erfolg, 1 im Fehlerfalle zurückgegeben. Sonst werden die normalen Ferhlercodes 10 oder 11 zurückgegeben. ADDBUFFERS Gebrauch: addbuffers Gerät Puffer [Gerät Puffer...] Beispiel: addbuffers DH1: 200 Wie das gleichnamige AmigaDOS Kommando. Weist einem AmigaDOS Gerät neue Puffer zu. Jeder Puffer verbraucht 512 Bytes RAM. (Chip!) ALIAS Gebrauch: alias [Name [Kommando Zeichenkette] ] Beispiel: alias vt "echo Starte VT100;run sys:tools/vt100" Weist einem Namen eine (Kommando-)Zeichenkette zu. Mehrere Kommandos können zu einem 'Alias' zusammengefasst werden, wenn sie wie im Beispiel in Anführungszeichen stehen, und mit Semikola getrennt werden. Danach braucht nur noch der Name eingegeben zu werden und die komplette Kommando-Zeile wird ausgeführt. 'Alias'e dürfen sich gegeseitig ausrufen, aber nicht rekursiv. Dadurch funktioniert z.B. so etwas: alias ls "ls -s" Rekursivität wird von der Shell nicht abgefangen ! Das Ersetzen durch 'alias'e kann wie folgt verhindert werden: \ls Übergabe von Argumenten an ein Alias: Gebrauch: alias Name "%Var[%Var...] [Kommando Zeichenkette]" alias name "*Var[%Var...] [Kommando Zeichenkette ]" Beispiel: alias xx "%q%w echo Hallo $q, Du siehst $w aus! xx Willie heute gut Ergebnis: Hallo Willie, Du siehst heute gut aus! Diese zweite Form des Alias-Befehls erlaubt es durch die Verwendung von Variablennamen, Argumente mitten im der Zeichenkette zu verwenden. Diese Variablen sind lokal und außerhalb des Alias nicht mehr wirksam. Diese haben keinen Einfluß auf andere gleichnamige Variablen. Werden mehrere Argumente angegeben, wird jeder Variablen ein Wort zugewiesen, der letzten aber, wie im Beispiel, der Rest der Zeile. Ein "*" statt dem "%" verhindert die Ausführung von Suchmustern. Beispiel: alias lharc "*a lharc $a Um die Suchmuster auszuführen, kann folgendes verwendet werden: exec set a $a IMPLIZITE ALIAS'e: Gebrauch: {Kommando;Kommando} {%var Kommando;Kommando} Argument1 .. ArgumentN Beispiel: {%tmp echo %tmp %tmp} Hallo Ergebnis: Hallo Hallo Geschweifte Klammern definieren temporäre Aliase. Ihre Ein- und Ausgabe kann als Ganzes umgelenkt werden, sie können Argumente und lokale Variablen haben. Diese zählen als ein Argument, selbst wenn sie Leerzeichen enthalten (wie bei Anführungszeichen) und sie können beliebig geschachtelt werden. Die schließenden Klammer ist optional, wenn jene am Ende einer Zeile steht. Beispiel: alias sicher {e "Sind Sie sicher?"; input -s Klar} AREXX Die Kommandos RXREC und RXSEND werden von der Cshell zur Verfügung gestellt. Damit ist optimales Arbeiten mit AREXX von der Shell gewährleistet. Der Rexxmast ist natürlich selber zu installieren, am besten in s:startup-sequence. Bitte auch im AREXX-Manual oder im AmigaDOS-Manual (WB 2.0) nachlesen. ASCII Gebrauch: ascii ascii Zeichenkette Zeigt beim Aufruf ohne Zeichenkette eine komplette ASCII Tabelle. Optionen: -h : zeigt die Nummern in hexadezimaler (sedesimal) Schreibweise -o : zeigt die Nummern in oktaler Schreibweise ASET Gebrauch: aset Name Wert Beispiel: aset INCLUDE include: Erzeugt eine Umgebungs-Variable im veralteten Aztec/ARP Format. ASSIGN Gebrauch: assign assign Logisch assign [-lnp] Log.1 Phys.1 [ ... Log.N Phys.N] Die erste Form zeigt alle Assigns. Die Zweite löscht ein Assign. Die Dritte weist dem logischen Gerät 'Logiisch1' das physikalische 'Physikalisch1' zu, etc. -l erzeugt late-binding Assigns (nur unter Kick 2.0) -n erzeugt non-binding Assigns (nur unter Kick 2.0) -p erzeugt path-Assigns (nur unter Kick 2.0) Eine Erklärung dieser Assign-Arten findet sich im AmigaDOS Handbuch. BASENAME Gebrauch : basename Var Pfad [Pfad ...] Beispiel : basename x df0:c/Dir # setzt x auf "Dir" basename y sys:tool/iconed # setzt y auf "iconed" Setzt die angegebene Variable auf den Dateinamen eines Pfades. CAT Gebrauch : cat [-n][Datei1 ... DateiN] Beispiel : cat fasel.txt Schreibt die angegebene Datei(en) auf die Standard-Ausgabe. Wenn keine Datei angegeben wird, wird statt dessen die Standard-Eingabe verwendet (Hinweis: ^\ markiert das Datei-Ende). CAT ist nur zur Ausgabe von Text-Dateien gedacht. Die -n Option nummeriert die ausgegebenen Zeilen. CD Gebrauch : cd [Pfad] cd -g Gerät1 [Gerät2 .. [GerätN] .. ] Wechselt den aktuelle Ordner. Die Angabe von '..' zum Wechseln in den Vaterordner ist erlaubt (allerdings handelt es sich dabei um ein Csh-spezifisches Feature - normalerweise wird auf dem Amiga "/" verwendet). In den meisten Fällen ist die Angabe von 'CD' überflüssig. Die einfache Eingabe eines Ordners reicht der Csh. Ein einzelnes '~' in der Kommando-Zeile wechselt stets zum jeweils letzten aktuellen Ordner. In zwei Fällen ist dennoch die Angabe von 'CD' sinnvoll: Die Eingabe 'cd *tem' wechselt in den Ordner dessen Name passt. Die zweite Form erzeugt eine Liste aller Ordner der angegebenen Geräte. Diese wird in der Datei gespeichert, das in der Variablen $_qcd angegeben ist (default: 'Csh:Csh-qcd'). Diese Datei wird nicht erweitert, sondern stets überschrieben. Wenn diese Datei einmal existiert, kann mit CD auch in Ordner gewechselt werden, die nicht im aktuellen Ordner liegen. Existieren zwei Ordner, von denen einer häufiger gebraucht wird, so sollte dieser zuerst in der qcd-Datei stehen. Ebenso kann die qcd-Datei sortiert werden (mit 'sort'). Es ist auch möglich, eine Abkürzung des Ordners einzugeben. Dazu wird kein '*' benötigt. Sollte dann versehentlich der falsche Ordner angesprochen werden, so können durch Wiederholen der Kommando-Zeile (Cursor-Up + Return) alle passenden Ordner angezeigt bekommen. Außerdem können logische Geräte und Assings in die qcd-Datei aufgenommen werden. So kann z.B. nach 'PageStream:' gelangt werden, indem 'cd page' eingegeben wird. CD ohne Argumente zeigt den aktuellen Ordner an. CLASS Gebrauch : [-n] Name {type=Argument} [ "actions" {action=Kommando} ] Beispiel : class zoo offs=20,dca7c4fd ext=.zoo actions view="zoo l" Definiert eine neue Klasse von Dateien und die Methoden, die auf solche in verschiedenen Fällen angewendet werden sollen. Siehe Abschnitt XIV: Objekte Optionen : -n alte Definition löschen CLOSE Gebrauch : close [Datei-Nummer] Schließt die angegebene, mit OPEN geöffnete Datei. Ohne Angabe einer Datei-Nummer werden alle Dateien geschlossen. S.a. FLIST und OPEN. CLS Gebrauch : cls Ein Alias. Löscht den Bildschirm, allerdings auch auf Terminals, wozu echo ^l nicht reicht. COPY Gebrauch : copy [-udfpm] Datei Datei oder : copy [-udfpm] Datei1 .. DateiN Ord oder : copy [-rudfp] Ord1...OrdN Datei1...DateiN Ord Optionen: -r rekursiv, auch Unterordner kopieren. -u update, nicht kopieren, wenn eine neuere Version existiert. -f freshen, nicht kopieren, wenn die Ziel-Datei nicht existiert oder neuer ist. -d Datei-Datum nicht mitkopieren. -p Sicherheits-Bits nicht mitkopieren. -m löscht das Original. Funktioniert nicht mit -r zusammen. Beispiel : copy -r dh0: dh2: Kopiert Ordner oder Dateien. Wenn Ordner kopiert werden sollen, muß die Option -r angegeben werden, um auch Unterverzeichnisse mitzukopieren. Sonst werden nur die Dateien der oberen Ebene kopiert. Es werden alle Dateien, die gerade kopiert werden, und alle Ordner, die gerade angelegt werden, angezeigt. Diese Ausgabe kann mit Ausgabe-Umlenkungen vermieden werden. Z.B.: copy -r dh0: dh2: >NIL: COPY bricht nach den aktuellen Datei ab, falls CTRL-C gedrückt wird. COPY setzt normalerweise das Datum des Ziel-Dateien auf das des Quell-Dateien. Dies kann mit -d verhindert werden. Analog werden die Sicherheits-Bits behandelt. Dies wird mit -p verhindert. Das Archive-Bit wird immer gelöscht. COPY erzeugt jetzt den Ziel-Ordner selbst, falls er noch nicht existiert, falls 'copy [-r] Ord Ord' eingegeben wurde. Bei der Eingabe von 'copy Datei Datei Datei Ord' muß 'Ord' jedoch schon existieren. CP Synonym zu COPY. DATE Gebrauch :date [-sr] [neues Datum] [neue Zeit] Beispiel : date Wednesday # gemeint ist NÄCHSTER Mittwoch Wird verwendet um das System-Datum und/oder -Zeit zu setzen. Alle Standard-Optionen können verwendet werden(yesterday, tomorrow, etc.). Führende Nullen sind nicht erforderlich. Ohne Parameter wird (aktuelle) DD-MMM-YY HH:MM:SS angezeigt. Optionen: -s speichert die aktuelle Zeit -r zeigt die verstrichene Zeit seit der gespeicherten aufs Hundertstel genau an. (Sinnvoll für Stapeldateien) DEC Gebrauch : dec Variablenname [Wert] Beispiel : dec abc Decrementiert (verringert) das Numerische Äquivalent der Variablen um den angegebenen Wert (Vorgabe ist 1) und setzt das ASCII-Zeichenketten-Resultat zurück in die Variable. DELETE Gebrauch : delete [-p][-r] Datei1 [..DateiN] Beispiel : delete fasel.txt frust.c Lösche die angegebenen Dateien. Das Kommando gibt immer Fehlerkode0 zurück. Leere Ordner können gelöscht werden. Die Option '-r' löscht nicht-leere Ordner indem es alle Unterordner rekursiv löscht. Wird die Option '-p' angegeben, können löschgeschützte Dateien gelöscht werden. Beim Löschen mit Suchmustern werden die Dateien aufgelistet wie sie gelöscht werden. Dieses kann unterdrückt werden, indem nach nil: umgeleitet wird. Wird die Option -q angegeben, werden keine Fehlermeldungen ausgegeben, wenn eine zu löschende Datei nicht existiert oder nicht gelöscht werden konnte. DIR Gebrauch : dir [-abcdfhiklnoqstuv] [-z lformat] [Pfad Pfad ... ] Beispiel : dir -ts downloads: dir -lz "%7s %-.16n %m" *.c Optionen: -d nur Ordner listen -f nur Dateien listen -h nur Dateien listen, die nicht mit einem Punkt anfangen, mit '.info' enden oder das h-Flag gesetzt haben. -s kurze Multi(4)-Kolonen Anzeige -c keine Farbänderung für Ordner -q zeigt keine Blocklängen an -o zeigt Datei-Kommentare an -n nur Namen anzeigen -p volle Pfadnamen anzeigen und Ordner-Titel unterdrücken -a zeigt das Alter aller Dateien im Format Tage Stunden:Minuten an -i identifiziert jede Datei, zeigt den Typ statt des Datums Siehe Kapitel XIV CLASSES -v summiert rekursiv alle Längen der Dateien in einem Ordner -l sortiert Dateien nach deren Länge, längste zuerst. -t sortiert Dateien nach deren Zeit, neueste zuerst. -k sortiert Dateien nach deren Klasse -b sortiert die Dateien rückwärts -g gibt Ordner am Anfang aus -e gibt Ordner am Ende aus -u es müssen genau zwei Ordner gegeben sein. Zeigt Dateien, die nur im ersten Ordner, in beiden oder im Zweiten vorkommen -z wählbares Ausgabeformat Zeigt einen Ordner mit angegebenen Dateien. Voreingestellte Ausgabe zeigt Datum, Sicherheits-Bits, Block-Grösse, Byte-Grösse und gesammten Platzverbrauch an. Sicherheits-Bits beinhalten neue 1.2/1.3 Bits (siehe protect) und ein 'c'-Bit welches anzeigt, das diese Datei einen Kommentar hat. Dateien werden alphabetisch sortiert, ohne auf Gross-/Klein-Schreibung zu achten. Ordner werden rot ausgegeben (ausser bei -c). Dir beachtet die Breite des Fensters. Die lformat-Zeichenkette wird verwendet, um ein eigenes Ausgabeformat zu erstellen. Alles andere gilt nicht. Die Zeichenkette kann folgende Zeichen enthalten: %a Alter %l LF wenn Kommentar %s Grösse %b Block-Grösse %m Multi-Kolonne %t Zeit %c c-Bit (Komment.) %n Name %u Grösse in K %d Datum %o Kommentar %v Ord. Grö. in engl. %f hsparwed Bits %p Name mit Pfad %w Ord. Grö. in Kb %i d-Bit f. Ord. %q Name mit '/' %x Übersetztes Datum %k Klasse (Art) %r Grösse in engl. Zwischen dem '%' und dem bezeichnenden Buchstaben kann auf Wunsch eine Feld-Weite angegeben werden. Wenn die Zahl von einem '-' angeführt wird, so wird der Feld-Inhalt linksbündig gesetzt. Bei einem Punkt wird der Inhalt bei Bedarf auf die Feld-Weite gekürzt. Wenn die Format-Zeichenkette ein %m enthält, wird Cshell versuchen, mehr als einen Eintrag auf einer Zeile auszugeben. Die Kolonnenbreite ist die Feld-Weite des %m-Eintrages. Wenn dieser fehlt, wird die Breite der ersten Datei angenommen. Wenn eine Datei länger ist, werden zwei Kolonnen verwendet. DISKCHANGE Gebrauch : diskchange Gerät Beispiel: diskchange df2: # das externe 5.25" LW wurde gewechselt Wie AmigaDOS diskchange. Sollte nur bei physikalisches Geräten angewendet werden. ECHO Gebrauch : echo [-en] Zeichenfolge Beispiel : echo hi there Ergebnis : hi there Gibt die gegebene Zeichenfolge wieder. Wenn '-n' angegeben wurde, wird kein Wagenrücklauf angefügt. Mit '-e' geht die Ausgabe auf die Standardausgabe. ELSE Gebrauch : else ; Kommando Beispiel : if -f fasel.c ; else ; echo "Nicht da" ; endif Die Else-Anweisung muss von einer IF-Bedingung angeführt werden. ENDIF Gebrauch : endif Das Ende einer If-Anweisung. Achtung, wenn von einer Stapeldatei mit unterminierten IF- Anweisungen zurückgekehrt wird, und das letzte IF falsch war,wird der Prompt in einen Unterstrich ('_') verwandelt, und keine Anweisungen werden ausgeführt bis 'endif' eingegeben wird. ERROR Gebrauch : error n Generiert einen Rückgabewert (Fehlerkode) n. EXEC Gebrauch : exec [-i] Kommando [Argumente] Beispiel : set cmd "dir ram:" exec $cmd # würde ohne exec nicht funktionieren Führt das angegebene Kommando aus. 'exec Kommando' ist gleichbedeutend zu 'Kommando', nur können Variablen angegeben werden, um Kommandonamen anzugeben. Achtung, die Kommandozeile wird ZWEIMAL interpretiert! Beispiele: set a dir ram:; exec $a # richtig set a mkdir; exec $a "Mein Ordner" # falsch! Macht 2 Ordner. Exec gibt den Wert zurück, den das auzuführende Kommando zurückgibt, es sei denn die Option '-i' (ignorieren) ist gesetzt, was immer 0 ergibt. FAULT Gebrauch : fault Fehler1 .. FehlerN Beispiel : fault 205 212 Wie AmigaDOS fault, gibt angegebene Fehlermeldungen zurück. FILENOTE Gebrauch : filenote Datei1 .. DateiN Kommentar filenote -s Datei1...DateiN Die erste Form setzt die AmigaDOS-Kommentarzeile der genannten Datei. Die zweite Form zeigt die Kommentare der genannten Dateien an. FLIST Gebrauch : flist Listet die Dateinummern der Dateien, die durch open geöffnet wurden. Siehe OPEN und CLOSE. FLTLOWER Gebrauch : fltlower Beispiel : dir | fltlower Oder : fltlower , =, und Kombinationen. Demzufolge bedeutet <> "ungleich", >= "grösser oder gleich", und so weiter... Wenn die Argumente nicht numerische Argumente sind, werden sie als Zeichenkette verglichen. Normalerweise wird als Argument entweder eine Konstante oder eine Variable ($varname) verwendet. Die zweite Form testet auf Vorhandensein des Arguments. Wenn das Argument eine Leerzeichenkette "" ist, ist die Bedingung FALSCH, sonst WAHR. Die dritte Form mit der Option -f testet auf Existieren der angegebenen Datei. Option -d testet die Art des angegebenen Objekts: Wenn es sich um einen Ordner handelt, ist die Bedingung WAHR, wenn es eine Datei ist oder nicht vorhanden, ist die Bedingung FALSCH. Option -m kann verwendet werden, um das Vorhandensein von FAST-Memory zu prüfen. Beispiel (kann im login.sh Datei eingebaut werden): if -m; resident -d lc1 lc2 blink; endif Wird die Form -t verwendet, werden Datum und Zeit der ersten Datei mit allen anderen verglichen; wenn die erste Datei jünger als alle anderen, ist die Bedingung FALSCH, sonst WAHR. Wenn eine Datei nicht existiert, wird sie als älter angenommen. Diese Option ist speziell nützlich um 'makefiles' ohne ein eigentliches 'MAKE' Programm zu erstellen. Beispiel: if -t test.o test.asm test.i ; asm -o test.o test.asm ; endif Die Option -r berechnet einen gegebenen RPN-Ausdruck (siehe RPN für genauere Erläuterung): Wenn der Wert zuoberst auf dem RPN Stapel 0 ist, gilt die Bedingung als FALSCH, sonst WAHR. Die Option -o testet auf eine Option 'Zeichen' im Rest des Arguments. Beispiel: if -o r -rp ram:comm1.c ergibt WAHR. Option -n kehrt das Ergebnis der Bedingung um. Um zu testen, ob eine bestimmte Variable definiert wurde, kann 'if -v varname' verwendet werden. Wenn das Kommando IF in der Kommandozeile verwendet wird und die Bedingung FALSCH war, wird als Prompt solange ein '_' verwendet und alle eingegebenen Befehle ignoriert, bis ein ELSE oder ENDIF Kommando ausgeführt wird. INC Gebrauch : inc VarName [Wert] Beispiel : set abc 5;inc abc 5;echo $abc Ergebnis : 10 Erhöht den Inhalt einer Variable um den angegebenen Wert (Wenn nichts angegeben wurde: um 1) und schreibt das Resultat als ASCII-Zeichenkette zurück in die Variable 'VarName'. INFO Gebrauch : info [Path1 ... PathN] Wenn INFO ohne Argumente aufgerufen wird, gibt es Information über alle logischen und physikalischen Geräte (devices) aus. Werden ein oder mehrere Pfade angegeben, wird nur die Information über die dazugehörigen Geräte angezeigt. INPUT Gebrauch : input [-s] Var1 ... VarN Beispiel : input abc Schreibt Daten von der Standard-Eingabe (oder einer umgeleiteten Ausgabe, oder von einer Pipe) in eine Variable. Die nächste Zeile, die als Eingabe kommt, wird in Worte aufgeteilt (wenn sie nicht in Anführungszeichen gesetzt wurde) und in die Variable geschrieben. Falls die Option -s eingeschalten wurde, wird die Eingabezeile als Ganzes genommen, mitsamt der Leerzeichen. Option -r schaltet die Eingabekonsole in der Einzelzeichenmodus bevor die Daten eingelesen werden (d.h. es wird nicht auf ein abschliessendes RETURN gewartet). Diese Option muss mit Vorsicht eingesetzt werden. JOIN Gebrauch : join [-r] Datei1..DateiN Zieldatei Beispiel : join teil1 teil2 teil3 TeilGanz Verbindet die angegebenen Dateien und erzeugt 'Zieldatei'. Wenn 'Zieldatei' schon existiert, wird eine Fehlermeldung angezeigt und das Kommando wird abgebrochen, es sei denn Option -r (ersetze = replace) wurde angegeben. KEYMAP Gebrauch : keymap nummer {taste=funktion} Beispiel : keymap 0 1030=4 1032=12 Definiert eine Tastenbelegung für Editiermodus der Csh Kommandozeile. Siehe auch Kapitel XV. LABEL Gebrauch : label name Setzt eine Sprungmarke an dieser Stelle. Wird in Stapeldateien verwendet, dann kann mit GOTO zu einer solchen Marke gesprungen werden. LINECNT Ein Filter das die Anzahl der Zeilen zählt, die es als Eingabe (Standard-Eingabe) erhält und schreibt diese Anzahl dann auf die Standard-Ausgabe. LOCAL Gebrauch : local [Var1 ... VarN] Generiert eine oder mehrere lokale Variablen. Diese Variablen verschwinden am Ende des 'alias' oder der Stapeldatei und können nicht von anderen 'alias' oder Stapeldateien angesprochen werden. Wird kein Argument angegeben, zeigt das Kommando alle lokalen Variablen und deren Inhalt an. LS Gleichbedeutend zum Kommando DIR. MD Gleichbedeutend zum Kommando MKDIR. MAN Gebrauch : man Kommando1 ... KommandoN Beispiel : man mkdir Zeigt Information über ein Shell Kommando oder andere Schlüsselwörter an. Dies beinhaltet insbesondere alle speziellen _variablen, sowie verschiedene Schlüsselwörter: SUCHMUSTER, PIPES, EDITIEREN, START und andere. Das spezielle Alias 'manlist' kann verwendet werden, um eine Liste ALLER Schlüsselwörter zu erhalten, die MAN unterstützt. Die Variable _man muss auf den Pfad der .doc Datei gesetzt werden: set _man dh1:docs/aliases.doc Csh:Csh.deutsch.doc Um eigene .doc Dateien zu erstellen, müssen vor alle Schüsselwörter vier (4) Leerzeichen gestellt werden. 'man' zeigt dann alle Zeilen bis es auf eine Zeile trifft, deren erste Zeichen ein alpha- numerisches ist oder vier vorangestellte Leerzeichen sind. MEM Gebrauch : mem [-cfqu] Optionen: -c zeigt den freien Speicher im CHIP-Memory Bereich -f zeigt den freien Speicher im FAST-Memory Bereich -q gibt nur die Zahl des freien Speichers ohne Text aus -s merkt sich die Menge des momentan freien Speichers -r zeigt den freien Speicher relativ zum letzten gemerkten Zustand. -l räumt den Speicher auf, macht soviel Speicher wie möglich frei. MENU Gebrauch : menu [-n] [ Titel Menupunkt1 ... MenupunktN ] Beispiel : menu Shell JrComm,,j Rename,"rename ",r quit Hängt ein zusätzliches Pulldownmenu an das aktive Shell Fenster. Bis zu sechs Menus mit je 16 Menupunkten können installiert werden. Wenn als 'Menupunkt' nur eine Zeichenkette angegeben wurde, wird ein Menupunkt mit demselben Namen erstellt. Bei der Anwahl eines solchen Menupunktes wird diese Zeichenkette dann beim Prompt eingefügt und ausgeführt. Wenn ein Komma mit einer nachfolgenden zweiten Zeichenkette angegeben wurde, wird diese zweite Zeichenkette als Kommando eingefügt und ausgeführt. Bei dieser Variante muss ein ^M (RETURN) von Hand hinzugefügt werden, falls das Kommando direkt ausgeführt werden soll. Wenn auch noch ein zweites Komma mit einem nachfolgenden Zeichen folgt, wird dieser als Tastenkombination für den Menupunkt genommen. (In Zukunft wird Gross-/Kleinschreibung eine Rolle spielen, deshalb muss Kleinschrift verwendet werden!) Wenn aus irgend einem Grund das Pulldownmenu kaputtgegangen ist, kann einfach ein 'menu' Kommando alleine ausgeführt werden. Option -n entfernt alle Menupunkte. Als Beispiel ist Csh:menu.sh anzusehen. MKDIR Gebrauch : mkdir Name Name Name... Beispiel : mkdir df0:stoff Erstellt einen neueen Ordner. MV Gleichbedeutend zum Kommando RENAME. Es ist nicht möglich über Geräte hinweg Dateien zu bewegen, etwa von einer Partition auf eine andere. Ein solches Kommando kann mit einem Alias einfach simuliert werden (ohne Sicherheitsabfrage!): alias newmv "%f1%f2 copy $f1 $f2;rm $f1" OPEN Gebrauch : open Dateiname Dateimodus Dateinummer Beispiel : open RAM:data w 1 Dieses Kommando erlaubt das Öffnen einer Datei, ein darauf folgendes Umleiten beliebig vieler Befehle in diese Datei und ein Schliessen der Datei zum Schluss. 'Dateiname' ist ein gültiger AmigaDOS Dateiname, als 'Dateimodus' sind entweder "r" zum Lesen oder "w" zum Schreiben erlaubt, 'Dateinummer' muss eine Zahl zwischen 1 und 10 sein. Um ein Programm von oder zu einer geöffneten Datei umzulenken, wird als Umleitungsdateiname ein Punkt '.' gefolgt von der 'Dateinummer' verwendet. Es sind nur 10 gleichzeitig geöffnete Dateien zulässig. Dazu ein komplettes Beispiel: open RAM:data w 1 echo -n 2+2= >.1 rpn 2 2 + . CR >.1 close 1 type RAM:data # zeigt 2+2=4 Siehe auch CLOSE, FLIST. PATH Gebrauch : path [-r] [Ordner1 ... OrdnerN] Ohne ein Argument gibt das Kommando die Liste aller AmigaDOS Pfade aus. Sonst wird 'Ordner' zum Pfad hinzugefügt, wobei Doppeleintragungen vermieden werden. Die Option '-r' löscht die gesamte (vorhandene) Pfadliste. PRI Gebrauch : pri Clinummer Pri Beispiel : pri 3 5 # Setzt Priorität von cli #3 auf 5 Ändert die Priorität des angegebenen Tasks (Das PS Kommando kann dazu verwendet werden, die 'Clinummer' herauszufinden). Wenn als 'Clinummer' 0 angegeben wurde, wird die Priorität des aktuellen Tasks (derjenige, der das Kommando ausführt) verändert. Dies ist sinnvoll für Stapeldateien. PROTECT Gebrauch : protect Datei1 ... DateiN [modus] flags Beispiel : protect MeineDatei +rwe Setzt AMIGADOS Sicherheits-Bits für die angegebenen Dateien. Mögliche Bits sind: h, s, p, a, r, w, e, d. (Siehe auch AmigaDOS Manual) Modus: + Setzt die angegebenen Flags (alle anderen bleiben) - Löscht die angegebenen Flags (alle anderen bleiben) = Setzt die angegebenen Flags (alle anderen werden gelöscht) Wenn kein Modus angegeben wird, wird '=' als Vorgabe-Modus angenommen. Das Archiv-Flag (a), wird jeweils, sofern nichts anderes angegeben wurde, gelöscht. PS Gebrauch : ps [Kommandoname1 ... KommandonameN] Gibt einen Status über alle CLI Processe z.B: Proc Command Name CLI Type Pri. Address Directory * 1 Csh Initial CLI 0 97b0 Stuff:shell 2 clock Background -10 2101a8 Workdisk: 3 emacs Background 0 212f58 Stuff:shell 4 VT100 Background 0 227328 Workdisk: Address ist die Speicheradresse des Tasks, Ordner ist der aktuelle Ordner des jeweiligen Commands (Kommandos). Der aktuelle CLI wird mit einem Stern in der ersten Spalte markiert. Optionen: -l Zeigt den kompletten Pfad der Kommandos -e Entfernt das Argument aus der Task-Liste (Wird übersprungen) PWD Gebrauch : pwd Setzt die Variable _cwd auf den aktuellen Pfad und zeigt diesen an. QSORT Gebrauch : qsort [-r] Ausgabe Dieses Filter sortiert die 'Eingabe' nach 'Ausgabe'. Die Option -r sortiert rückwärts. QUIT Gebrauch : quit Verlässt die Shell. Achtung, wurde die Csh von der normalen AmigaShell in shell-startup gestartet, werden jetzt erst die nach 'Csh' folgenden Befehle gestartet. RBACK Gebrauch : rback Kommando Startet ein Kommando in einem Hintergrund-Process. Ausgaben werden NICHT sichtbar. Abfragen des Kommandos, können nicht entgegengenommen werden. rback entspricht 'run command >NIL: < == Testet auf grösser-als, kleiner-als, gleich. Auch <= und >= sind erlaubt. ! Logische NICHT Operation DUP Dupliziert Wert auf dem Stacks DROP Löscht obersten Wert des Stacks SWAP Tauscht Wert mit dem obersten auf dem Stack aus. Um keinen Konflikt mit den Ausgabeumlenkungs-Zeichen, > und < zu bekommen, müssen die Operatoren in diesem Fall zwischen Anführungszeichen "" stehen. 3 2 ">" # Ergibt 1, dies wird auf die Standardausgabe # gelenkt RUN Gebrauch : run Programm Argumente Beispiel : run emacs test.c Startet das Programm unter einem neuen Process. In der jetzigen Implementation des Kommandos run, kann die Ausgabe und die Eingabe des Programm nicht umgelenkt werden. Das Kommando ist nicht ganz zuverlässig: Gebrauch auf eigenes Risiko. $_newproc wird auf den Wert der CLI-Nummer des neuen Processes gesetzt Siehe auch rback RXREC Gebrauch : rxrec [portname] Generiert einen AREXX-Port mit spezifizierten Namen. Vorgabe ist "rexx_csh". Anschliessend geht die Shell in einen Warte-Modus, in der sie auf Kommandos wartet. Achtung, der einzige Weg diesen Status zu verlassen, besteht darin, auf den angegebenen ARexx-Port die Mitteilung 'bye' zu senden. Beispiel: Eine weitere Cshell in einem neuen CLI öffnen. Dort eingeben: rxrec Die Shell gibt nun keine Antwort auf Kommandos, denn diese wartet auf ARexx-Mitteilungen (port "rexx_csh"). Auf der anderen Cshell bitte eingeben: rxsend rexx_csh "dir ram:" Es wird auf der neuen CShell der Inhalt des Ordners ram: ausgegeben. Um die neue CShell wieder freizugeben, ist rxsend rexx_csh bye einzugeben. Die neue CShell ist nun wieder im (normalen) Kommando-Modus RXSEND Gebrauch : rxsend [-lr] PortName Kommando1 ...KommandoN Sendet Kommandos zu einem AREXX-Port. Jedes Kommando wird als einzelnes Kommando gesendet! Es werden keine Zusätze benötigt, um rxrec zu starten, nur ein Programm mit dem richtigen AREXX-Port. Ein Beispiel ist CygnusEdProfessional: Hier als Beispiel ein Kommando das den CED wiederbelebt (falls im Wartemodus), eine Datei namens test.c lädt, und ein Sprung zur Zeile 20 macht: rxsend rexx_ced "cedtofront" "open test.c" "jmp to line 20" # rexx_ced ist der Name des AREXX Port's für CygnusEd Die Option -r setzt die Variable _result auf den Rückgabe-Wert des ausgeführten AREXX Kommandos. Die Option -l sendet die ganze Zeile als EIN Kommando Mehr Details sind dem jeweiligen Applikations-Handbuch zu entnehmen. SEARCH Gebrauch : search [-abcefnqrvw] Datei1 ... DateiN Zeichenkette Durchsucht die angegebenen Dateien nach einer Zeichenkette. Nur jeweils eine Zeile, in der die Zeichenkette gefunden worden ist, wird angezeigt. Fals als Dateiname STDIN (Grossbuchstaben) angegeben wird, wird von der Standard-Eingabe gelesen. Somit kann mit Hilfe von PIPE's ein Datenstrom durchsucht werden. Beispiel: strings MeinProgramm | search STDIN .library Zeigt alle Libraries die in "MeinProgramm" verwendet werden. Search ist sehr schnell. Wenn keine der Optionen -w, -e und STDIN angegeben wurden wird die Datei in den Speicher geladen. Optionen: -a (abort, Abbruch) Die Ausgabe wird angehalten, beim ersten Vorkommen des Suchmusters. -b (Binary, binär) Zeigt den Byte-Offset der gefundenen Zeichenkette In Kombination mit -n, werden nur Offset's Angezeigt. -c (case, Gr./Kl.) Es wird strikt abhängig von Gross/Kleinbuchstaben durchsucht. -e (Exklusiv) Zeigt Zeilen in denen die Zeichenkette NICHT vorkommt -f (files, Dateien) Zeigt nur den Namen der Dateien in dem die Zeichenkette gefunden wurde. -l (left, Links) Das Suchmuster beginnt am Anfang einer Zeile (dies ist schneller als Suchmuster zu nutzen) -n (number, Nummer) Schaltet die Zeilen-Nummerierung ab. -o (only, nur) Sucht nur ganze Wörter. -q (quiet, still) Unterdrückt das Ausgeben der Dateinamen. -r (Rekursiv) Wenn ein Ordner angegeben wird, werden alle Dateien und Ordner rekursiv durchsucht. -v (verbose, Kommentar) Zeigt jeden Dateinamen auf einer separaten Zeile. Dies wird automatisch eingeschaltet, wenn der search umgeleitet wurde. -w (wild card, Suchmuster) Siehe Unten. Bemerkungen zu Suchmustern: - Benutzt Shell-Standardmuster. - Alle Standard ARP Suchzeichen sind verwendbar: * ? [] () | ~ ' # - Die ganze Zeile muss eine Such-Zeichenkette ergeben. - Die Zeichenkette muss zwischen Anführungszeichen stehen! (!!) Beispiel: search -cr df0:include ACCESS Findet alle Vorkommen von ACCESS (gross geschrieben)in allen Dateien im df0:include Ordner. search -w shell.h "'#define*" Zeigt nur Zeilen einer Datei in der der Anfang mit #define beginnt. Das Zeichen ' muss vor # stehen, da # ein Spezial- Zeichen ist. SET Gebrauch : set [VarName] [Zeichenkette] Beispiel : set abc hallo Set ohne Argumente gibt Liste aller aktuellen Variablen und deren Inhalt aus. Set mit einem Argument zeigt den Inhalt der angegebenen Variable. Wird ein Name und eine Zeichenkette angegeben, so wird die Zeichenkette in der spezifizierten Variablen gespeichert. Siehe auch Abschnitt für spezielle _variablen. SETENV Gebrauch : setenv UmgVar Wert Setzt eine ENV: (Environment, Umgebung) Variable auf angebenen Wert. Der Wert muss in Anführungszeichen gesetzt werden, enthält er Leerzeichen. SLEEP Gebrauch : sleep Zeitwert Beispiel : sleep 10 Für 'Zeitwert' - Sekunden warten, oder aber solange bis ^C gedrückt wird. SPLIT Gebrauch : split QuellVar ZielVar1 ... ZielVarN Weist ein Wort in QuellVar jedem ZielVar zu, den Rest von QuellVar an das letzte Zielvar. Achtung, Variablen-NAMEN angeben, nicht Variablen. STACK Gebrauch : stack [Wert] Beispiel : stack 8000 Ändert den Standard Stack für den benutzten CLI. Ohne Parameter wird die aktuelle Stackgrösse ausgegeben. Jedes Programm benutzt eine gewisse Menge des Stacks. Ein Stack ist ein Speicherraum, in dem z.B. Variablen gespeichert werden können. Der nötige Verbrauch ist der jeweiligen Applikationsbeschreibung zu entnehmen. Ein normaler Stack bewegt sich zwischen 4000 und 25000 Bytes. Die Shell selber braucht ca. 8000 Bytes Stack für Variablen, diverse Speicheroperationen und PIPES. STRHEAD Gebrauch : strhead VarName MarkierZeichenkette Beispiel : strhead x . blafasel.bas # Setzt x auf "blafasel" Löscht alles ab dem MarkierZeichen in der 'Zeichenkette' und weist das Ergebnis der Variablen 'VarName' zu. STRINGS Gebrauch : strings Datei1..DateiN MinLänge Beispiel : strings c:dir c:list shell 7 Gibt alle Zeichenketten die in den angegebenen Dateien (normalerweise binär) vorkommen aus, die mindestens die Länge MinLänge haben. STRLEFT Gebrauch : strleft VarName Zeichenkette n Beispiel : strleft x LangZeichenkette 5 # Setzt x auf "LangZ" Weist die linken n Zeichen einer Zeichenkette der Variablen VarName zu. STRLEN Gebrauch : strlen VarName Zeichenkette Beispiel : strlen x Hallo # setzt x auf "5" Weist die Länge einer Zeichenkette einer Variablen VarName zu. STRMID Gebrauch : strmid VarName Zeichenkette n1 [n2] Beispiel : strmid x LangZeichenkette 5 3 # setzt x auf "Zei" Nimmt n2 Zeichen der Zeichenkette, ab der Stelle n1, und weist sie der Variablen VarName zu. Wird n2 weggelassen, wird die ganze Zeichenkette ab n1 zugewiesen. STRRIGHT Gebrauch : strright VarName Zeichenkette n Beispiel : strright x LangZeichenkette 12 # setzt x auf "kette" Weist die rechten n Zeichen einer Zeichenkette einer Variablen zu. STRTAIL Gebrauch : strtail VarName MarkierZeichen Zeichenkette Beispiel : strtail x . blafasel.bas # setzt x auf "bas" Löscht alles vor und inklusive des MarkierZeichen in der Zeichenkette und weist das Ergenis der Varibalen VarName zu. SOURCE Gebrauch : source Datei [Argumente] Beispiel : source mymake.sh all Ergebnis : Die Stapeldatei 'mymake.sh' wird mit der gesetzten Variable _passed = 'all' aufgerufen. Führt Kommandos aus einer Stapeldatei aus. So können Kommandos in einer Datei zusammengefasst werden, und diese dann mit dem Kommando 'source' ausgeführt werden. Ge-Source'te Dateien haben den zusätzlichen Vorteil, das diese Schleifen (siehe GOTO und LABEL) benutzen können. An die SOURCE Dateien können Argumente übergeben werden, indem nach dem Dateinamen diese spezifiziert werden. Argumente werden über die _passed Variable weitergegeben (als einzelne Zeichenkette, Menge von Wörtern). Lange Zeilen können mit einem Backslash (\) am Ende der Zeile in mehrere Zeilen aufgeteilt werden. Eine einzelne Zeile muss kürzer sein als 512 Zeichen, aber die geteilten Zeilen können insgesamt länger sein. Es gibt kein Limit für die Länge der zusammengesetzten Zeile. Automatisches 'sourcen' wird ausgeführt durch ein Anhängen eines .sh Suffix an die Stapeldatei (nicht notwendig das s-Bit zu setzen), und normales Aufrufen, so wie es mit einem echten Programm geschehen würde: --------- Datei hallo.sh --------- foreach i ( $_passed ) "echo "Hi $i" --------------------------------- $ hallo Emil Anton Bert hallo Emil hallo Anton hallo Bert Ist das letzte Zeichen einer Zeile in einer Stapeldatei ein '{', dann werden alle folgenden Zeilen an die aktuelle Zeile angehängt und durch Semikola gtrennt, solange bis das letzte Zeichen einer Zeile ein '}' ist. Solche Blöcke können verschachtelt sein. --------- Datei lang.sh --------- alias komplex { echo -n "dieses alias " echo "funktioniert!" } --------------------------------- $ lang $ komplex dieses alias funktioniert! TACKON Gebrauch : tackon VarName Pfadname Dateiname Beispiel : tackon x df0:c Dir # setzt x auf "df0:c/Dir" oder : tackon x df0: Preferences # setzt x auf "df0:Preferences" Hängt korrekte Dateinamen an einen Pfadnamen und weist das Ergebnis der spezifizierten Variablen zu. TAIL Gebrauch : tail Dateiname [Anzahl] Beispiel : tail readme 20 Zeigt die letzten "Anzahl" Zeilen der Datei "Dateiname" an. Wird Anzahl nicht angegeben, so wird 10 angenommen. TEE Gebrauch : tee [Datei] Beispiel : cc test.c | tee >error.list # Compiliert test.c und kopiert Fehlermeldungen # automatisch nach error.list Kopiert die Standardeingabe (stdin) auf die Standardausgabe (stdout) und die angegebene Datei. Wird die Datei nicht angegeben, so wird die Standardfehlerausgabe (stderr) benutzt. TOUCH Gebrauch : touch Datei1 [.. DateiN] Setzt den Datumsstempel der Datei auf aktuelle Zeit und Datum und löscht das Archive-Bit. TRUNCATE Gebrauch : truncate [n] Beispiel : alias | sort | truncate Ein Filter welches die Breite der Standardeingabe (stdin) auf die angegebene Breite festlegt, versucht ebenso tab und Escape-sequenzen durchzulassen. Wird die Breite nicht angegeben, so wird die aktuelle Fensterbreite benutzt. TYPE Synonym zu CAT. UNALIAS Gebrauch : unalias Name1 [.. NameN] Beispiel : unalias vt Löscht Aliase. UNIQ Gebrauch : uniq Dieses Filter löscht alle fortlaufenden, mehrfach vorkommende Zeilen in einer Datei, bzw der Standardeingabe. Ist besonders sinnvoll für sortierte Dateien. UNLOCAL Gebrauch : unlocal Var1 [... VarN] Löscht eine oder mehrere lokale Variablen. UNSET Gebrauch : unset Name1 [.. NameN] Beispiel : unset abc Setzt Variablen zurück. Löscht sie komplett. USAGE Gebrauch : usage [Kommando1 [.. KommandoN] ] Wenn ohne Argumente aufgerufen, wird eine kurze Information über spezielle, benutzte Kommando ausgegeben. Ansonsten wird die Gebrauchsanleitung der befragten Kommandos ausgegeben. Wird ein Kommando mit '?' als Parameter aufgerufen, so wird die Gebrauchsanleitung ebenfalls ausgegeben. VERSION Gebrauch : version Zeigt aktuelle Version der Shell, und die Autoren werden gelistet. WAITFORPORT Gebrauch : waitforport Portname [Sekunden] Wartet auf Eingabe des Port 'Portname'. Wartezeit ist standarmässig auf 10 Sekunden begrenzt. WHEREIS Gebrauch : whereis [-r] Dateiname [Gerät1 .. GerätN] Beispiel : whereis -r List df0: dh0: Wird nur der Dateiname angegeben, so durchsucht Whereis alle Ordner im aktuellen Ordner nach diesem Datei. Ein Asterisk '*' wird an den Dateinamen angehängt. Suchmuster sind erlaubt (dann wird kein Asterisk mehr angehängt) für Dateinamen, nicht für Pfadnamen. Werden zusätzliche Argumente übergeben, sucht Whereis nur in diesen Pfaden, nicht im aktuellen Ordner. Whereis -r durchsucht alle vorhandenen Geräte. WINDOW Gebrauch : window [-q][-f][-b][-l][-s] [Dimensionen] Optionen : -f (front, vorne) Window nach vorne holen -b (back, hinten) Window nach hinten schieben -l (large, gross) Window auf Maximum vergrössern -s (small, klein) Window auf Minimum verkleinern -a (activate, aktiviere) Window aktivieren -q (query, abfrage) Zeigt alle geöffneten Windows und Screens Viele Operationen für das CLI Window (Fenster). Werden Dimensionen angegeben, so müssen sie in der Form x y Breite Höhe spezifiziert werden (zwischen den Werten ein Leerzeichen). Das Kommando "window -l" kann sinnvoll sein für PAL Maschinen, um ein volles, auf PAL angepasstes Window zu erhalten, aus der login Sequenz heraus z.B., oder aber wenn eine Overscan Workbench genutzt wird. Die Option "-q" zeigt die Window/Screen Dimensionen eines jeden geöffneten Window und Screens an. WRITEFILE Gebrauch : writefile VarName Schreibt ein Menge von Wörtern auf die Standardausgabe, ein Wort pro Zeile. Achtung, der Name der Variablen (VarName) soll übergeben werden, nicht der Inhalt ($VarName). IX. SPEZIAL VARIABLEN ------------------------- _abbrev Auf 'n' gesetzt, können interne Befehle nicht mehr abgekürzt werden. _bground Ist wahr, wenn die Shell mit einer nicht-interaktiven Eingabe gestartet wurde. _clinumber Enthält die aktuelle CLI Prozessnummer (1-20). _cwd Enthält die Zeichenkette, welche den aktuellen Ordner angibt, von der Wurzel (:) ausgehend. Die SHELL kann mit ihrem aktuellen Ordner durcheinanderkommen, wird durch ein externes Programm der Ordner verändert. Dazu PWD benutzen, um die _cwd Variable in solchen Fällen neu zu setzen. _debug Debug Modus. Muss auf einen Wert gesetzt sein. _every Enthält den Namen eines Befehls, der ausgeführt wird, bevor das Prompt ausgegeben wird. Bitte nicht benutzen um das Prompt selber auszugeben. _except Siehe EXCEPTION. _hilite Enthält die Zeichensatzattribute die benutzt werden, um Schrift hervorzuheben. Ein Zeichen für ein Attribut: b für Bold i für Italic u für Unterstrich r für Negativ c3 für Vordergrundfarbe 3 c3,2 für Vordergrundfarbe 3 und Hintergrundfarbe 2 Jede Kombination erlaubt. Die _hilite Standardvorgaben sind "c7", im Terminalmodus "r". _history Diese Variable enthält einen numerischen Wert, und gibt an wie weit im Kommandospeicher zurückgesehen werden soll. Auf 0 zu setzen, soll der Kommandospeicher abgeschaltet werden, um z.B. festzustellen ob Ihr Programm Speicher nicht freigibt. Ist standardmässig auf 50 gesetzt. _insert Setzt den Standardwert für den Einfüge/Überschreib Modus für den Kommandozeileneditor. ESI-i schaltet zwischen beiden Modi, aber nach einem wird wieder auf einen hier angegebenen Standard- wert zurückgesetzt. Standardmässig ist _insert auf 1 gesetzt, wird _insert gelöscht, so wird der Überschreibmodus Standardwert. _ioerr Enthält den zweiten Fehler Kode des letzten Befehls. Wird nach jedem externen Kommando geändert, ebenso nach einem fehlerhaft ausgeführten internen Kommando. Siehe auch @ioerr(). _kick2x Ist wahr, wenn dos.library V36 geöffnet werden konnte, was bedeutet, das Kickstart release 2 existiert. _lasterr Rückgabewert des zuletzt ausgeführten Befehls. Dies beinhält interne Befehle und externe Befehle, um also diese Variable zu nutzen, muss sie DIREKT nach Aufruf des zu befragenden Befehls abgefragt werden. _lcd Enthält den Namen des zuletzt benutzten Ordners. Das eingebaute Alias 'dswap' wechselt in diesen Ordner. Erneut aufgerufen ist wieder der Ordner aktuell, der am Anfang aktiv war. _man Enthält den Pfad und den Namen ihrer .doc Dateien. Standardwert ist 'Csh:Csh.doc'. _maxerr Enthält den bislang schlechtesten (höchsten) Rückgabewert. Um dies nutzen zu können, den Wert normalerweise auf '0' setzen, dann ein paar Befehle ausführen, und erneut hier nachsehen. _minrows Enthält die minimale Anzahl Zeilen, die ein Window haben muss, damit das 'quick scrolling' eingeschaltet wird. _nobreak Schaltet CTRL-C ab wenn auf '1' gesetzt. _passed Diese Variable enthält die Argumente, die einem BatchDatei überge- ben werden, wenn es mit 'source' gestartet wird. Beispiel: test a b c d -------- Datei test.sh ---------- echo $_passed foreach i ( $_passed ) "echo YO $i" -------------------------------- _path Gibt die Ordner an, in denen Csh nach ausführbaren Programmen suchen soll. Der aktuelle Ordner und der AmigaDOS Pfad werden zuerst durchsucht. Dieser Pfad wird zuerst nach dem Kommando, dann nach Kommando.sh (Stapeldatei) durchsucht. Beispiel: set _path ram:c,ram:,sys:system,dh1:tools,df0:c _prompt Diese Variable enthält die Zeichen, die als Eingabeaufforderung ausgegeben werden. Diese kann folgende Kontrollzeichen enthalten: %c (color, Farbe) macht das Prompt farbig. Siehe _hilite %m (memory, Sepicher) gibt freien Speicher in Kb an %d (date, Datum) aktuelles Datum %t (time, Zeit) aktuelle Zeit %p (path, Pfad) aktueller Pfad %n (number, Nummer) eigene CLI-Nummer %v (version, Version) benutzte Csh-Version %h (history, K-Speicher) momentane Kommandospeicher-Nummer %f (free, Frei) freier Platz auf dem aktuellen Drive %r (pRiority, Priorität) eigene Task-Priorität %s (shells, Shell) Anzahl der offenen Csh's Voreingestellt ist "%c%p> " Wenn vergessen wurde, ein 'if' Kommando mit 'endif' abzuschliessen, wird das Prompt zu '_ ' _pipe Der Ordner für Temporärdateien. Voreingestellt: 'T:' _qcd Enthält den Namen der Datei, die alle Ordner aller vorhandenen Geräte enthält. Falls nicht gesetzt, wird das 'quick-cd' abgeschaltet. _rback Der Name des Kommandos, das vor die Kommandozeile gehängt wird, falls der User ein '&' angehängt hat. Normalerweise 'rback'. _rxpath Wie _path, aber hier sucht Csh nach .rexx Dateien. Normalerweise 'REXX:' _scroll Anzahl der Zeilen, die das Window auf einmal scrollen soll, falls $_minrows überschritten ist. _terminal Sagt aus, ob die Csh im Terminal-Modus läuft _titlebar Erscheint in der Titelzeile des Windows. Die gleichen Kontroll- zeichen wie für _prompt können verwendet werden. _version Enthält die aktuelle Versionsnummer von Csh, z.B. 517 X. FUNKTIONEN --------------- FUNKTIONEN Funktionen müssen mit einem @-Zeichen anfangen und können nicht abgekürzt werden. Vor ihnen muss ein Leerzeichen stehen, genauso hinter der öffnenden und vor der schliessenden Klammer. Funktionen dürden verschachtelt werden. Gross/Kleinschreibung ist wichtig bei Funktionsnamen, jedoch nicht bei den Operationen. Funktionen können als Kommandos verwendet werden. In diesem Fall werden sie ohne @ geschrieben. Ihren Rückgabewert geben sie dann auf den Bildschirm aus. Diese können nicht abgekürzt werden, und ein Kommando gleichen Namens hat Vorrang. drives -> DF0: DH1: DH2: RAM: WB_2.x: Bis jetzt können Funktionen nicht selber definiert werden. Achtung, Wortmengen und Zeichenketten sind nicht identisch. Nach set var hallo da ist 'var' eine Menge von Worten, aber nach set var "hallo da" ist 'var' eine einzige Zeichenkette (ein einziges Wort). Wenn die Variablen mit 'echo' ausgegeben werden, schauen sie gleich aus, aber z.B. in 'foreach' verhalten sie sich verschieden. @split und @concat wandeln die beiden Formen. @abbrev( Zei1 Zei2 [len] ) wahr wenn die ersten Zeichen von Zei1 eine Abkürzung von Zei2 sind. (Abkürzung von Kommandos, Funktionen) @abs( Num ) gibt den Absolutwert von zurück @age( Datei ) das Alter der Datei in Tagen, 99999 falls nicht gefunden @appsuff( Name suffix ) hängt, wenn nötig, die Endung an den Namen an @arg( arg ... arg ) wie @pickargs( ) @availmem( [Typ] ) liefert den freien 'chip', 'fast' oder Gesamtspeicher. @basename( Pfad ... Pfad ) Gibt die reinen Dateinamen ohne Pfade zurück. @center( Wort Länge ) gibt eine Zeichenkette der Länge mit darin zentriert @checkport( Portname ) sagt aus ob ein bestimmt Port existiert @clinum( ProcName ) gibt die CLI-Nummer des Prozesses zurück. @complete( Abkürzung Wort ... Wort ) gibt das erste Wort zurück, von dem eine Abk. ist @concat( Wort1 ... WortN ) hängt alle Worte zu einer Zeichenkette zusammen, getrennt durch Leerzeichen. Siehe @split @confirm( Titel Punkt1 .. PunktN) fragt nach Bestätigung für jedes Wort , und gibt nur die Bestätigten zurück. @console( STDIN | STDOUT ) sagt ob Standard-Eingabe (stdin) oder die Standard-Ausgabe (stdout) interaktiv (nicht umgeleitet) ist. @dectohex( Zahl ) wandelt eine Zahl von Dezimal nach Hex (sedesimal) @delword( Wort1 ... WortN-1 WortN ) gibt alle Worte ausser dem N-ten zurück @delwords( Wort1 ... WortN i j ) löscht j Worte vom i-ten an @dirs( Name1 .. NameN ) gibt nur die Ordner unter den Namen zurück @drive( Pfad ) gibt den Geräte-Namen zurück, der zu 'Pfad' gehört @drives( ) gibt alle Partitionen und Diskdrives zurück @exists( Datei ) sagt aus ob eine Datei existiert @fileblks( Datei1 ... DateiN ) sagt aus wieviele Blöcke für diese Dateien benötigt werden. @filelen( Datei1 ... DateiN ) sagt aus wieviele Bytes für diese Dateien benötigt werden. @fileprot( Datei ) gibt eine Zeichenkette der Sicherheits-Bits der Datei zurück. @filereq( Titel Pfad&Muster Dateiname ) öffnet einen ARP Dateirequester und gibt den gewählten Namen zurück @files( Datei1 ... DateiN ) gibt nur die Dateien zurück, keine Ordner. Siehe @dirs @freebytes( Pfad ) die Anzahl der freien Bytes auf dem ensprechenden Pfad @freeblks( Pfad ) die Anzahl der freien Blöcke auf dem ensprechenden Pfad @freestore( Pfad ) der freie Speicher auf dem Pfad, gegeben in Kb und Mb @getenv( VarName ) gibt den Wert der ensprechenden ENV: Variablen zurück @getclass( Datei ) gibt die Klasse (Typ) der Datei zurück. Siehe Kapitel XIV @howmany( ) zeigt die Zahl der laufenden CShells. @index( Zeichenkette Muster ) sucht in und gibt Offset zurück, 0=nicht gefunden @info( Pfad ) gibt die entsprechende Zeile aus 'info' zurück @intersect( Wort1 ... WortN , WortN+1 ... WortM ) zeigt jene Worte, die in beiden Listen sind. Siehe @union, @member @ioerr( num ) Gibt die Fehler-Zeichenkette aus, der zur Fehlernummer gehört @lookfor( Datei Pfad) sucht nach einer Datei im akt. Ordner und in . Siehe $_path @lower( Arg1 ... ArgN ) macht seine Argumente kleingeschrieben. Siehe @upper @match( Wort1 ... WortN "Muster" ) gibt jene Worte zurück, auf die das Suchmuster passt. @max( Wert1 ... WertN ) bestimmt das Maximum der angegebenen Zahlen @megs( Wert ) gibt eine Zahl in Kb, Mb oder Gb zurück (gerundet) @member( Wort Wort1 ...WortN ) sagt aus ob unter den anderen ist. Siehe @union, @intersect @min( Wert1 ... WertN ) bestimmt das Minimum der gegebenen Zahlen @mounted( Gerät ) sagt aus ob (z.B. RAD:) vorhanden @nameext( Dateiname ) gibt die Extension (Suffix) des Dateinamens an @nameroot( Dateiname ) gibt alles ausser der Extension des Dateinamens @opt( Arg1 ... ArgN ) siehe @pickopts( ) @pathname( Datei ) gibt den Pfad zu einer Datei zurück. @pickargs( Arg1 ... ArgN ) wählt aus seinen Argumenten die, welche nicht mit '-' beginnen @pickopts( Arg1 ... ArgN ) wählt aus seinen Argumenten die, welche mit mit '-' beginnen @rpn( Ausdruck ) berechnet den rpn Ausdruck. Siehe Kommando 'rpn' @sortargs( Arg1 ... AgrN ) sortiert seine Argumente alphabetisch @sortnum( Wert1 ... WertN ) sortiert seine Argumente numerisch @split( Zeichenkette ) macht aus einer Zeichenkette mehrere Worte. Siehe @concat @strcmp( Zeichenkette1 Zeichenkette2 ) gibt -1, 0 oder 1 abhängig vom alphabetischen Vergleich @strhead( Markierungszeichen Zeichenkette ) siehe strhead Kommando @strleft( Zeichenkette Wert ) siehe strleft Kommando @strmid( Zeichenkette Wert1 Wert2 ) siehe strmid Kommando @strright( Zeichenkette Wert ) siehe strright Kommando @strtail( Markierungszeichen Zeichenkette ) siehe strtail Kommando @subwords( Wort1 ... WortN i j ) gibt die nächten j Worte von i an zurück @tackon( Pfad Datei ) siehe tackon Kommando @trim( Wort1 ... WortN ) entfernt Leerzeichen vorn und hinten an den Worten @unique( Wort1 ... WortN ) sortiert die Argumente und macht jedes einmalig @union( Name1 ... NameN , NameN+1 ... NameM ) gibt die Worte zurück, ein in einer der beiden Listen sind @upper( Wort1 ... WortN ) macht aus den Worten Grossschrift. Siehe @lower @volume( Pfad ) gibt den Geräte-Namen für den gegebenen Pfad an @winheight( ) gibt die Höhe des Windows in Punkten an @winleft( ) gibt die linke Ecke des Windows zurück @wintop( ) gibt die obere Ecke des Windows zurück @winwidth( ) gibt die Breite des Windows zurück @without( Name1 ... NameN , NameN+1 ... NameM ) gibt die Worte aus Liste 1 zurück, die nicht in Liste 2 sind @word( Name1 ... NameN i ) nimmt das i-te Wort aus der Liste @words( Name1 ... NameN ) gibt die Anzahl der Worte in der Liste XI. VERSCHIEDENES ----------------- Csh erlaubt nun schnelles 'Scrolling' in grossen Windows. Dies heisst dass wenn immer der Cursor die unterste Zeile des Windows erreicht, der Text um mehrere Zeilen auf einmal nach oben springt. Allerdings funktioniert das nur mit den folgenden Kommandos: dir, cat, htype, files, search, truncate, tee Die Anzahl der zu scrollenden Zeilen steht in _scroll. Ein Wert <=1 schaltet das schnelle Scrolling' ab. Die Anzahl der Zeilen, die ein Window mindestens haben muss, damit sich das schnelle Scrolling einschaltet, steht in $_minrows (normalerweise 34). Beliebige Kommandos nach 'cat' umgeleitet, befähigen auch diese zum Schnellen Scroll, z.B.: list | cat Csh kann beendet werden durch den Close-Button in den Windows von AmigaDOS 2.0 Shells. Es wird dann das Kommando 'quit' aus- geführt. Durch das Kommando alias quit "Endcli;quit wird das Window sofort geschlossen wenn der Close-Button ange- klickt wird. EXCEPTIONS (Fehlerbehandlung) Falls ein Fehler passiert und keine Variable _except existiert, wird die aktuelle Zeile abgebrochen. Falls _except exisitiert, hat es die Form: "nnn;commands..." Wobei der kleinste Wert ist, der einen Fehler verursachen soll. Wann immer ein Kommando einen Return-kode zurückgibt, der grösser oder gleich ist, werden die Kommandos in _except ausgeführt. WENN _except EXISTIERT WIRD DIE KOMMANDOZEILE NICHT ABGEBROCHEN! Wenn abgebrochen werden soll, sollte das letzte Kommando in _except 'abortline' sein. Exception handling ist während des exception handlings selber ausgeschaltet. Beispiele: set _except "20;abortline" set _except ";" # alle Fehler werden ignoriert XII. Beispiele für 'SOURCE Dateien' ----------------------------------- Wird in einem CLI-Fenster das Kommando 'Csh ' eingegeben oder dies im Startup-Script stehen hat, so wird die Datei 'gesourced'.Dies entspricht in einem CLI-Fenster der Eingabe von 'Csh' und dem Eingeben von 'source ' innerhalb der Shell. Beispiel: ### compat.sh ### # Diese Alias-Liste stellt sicher, daß aus alten Csh-Versionen # gewohnte Abkürzungen nicht neue Befehle aufrufen. alias as aset alias cl close alias g goto alias h help alias he help alias m md alias q quit alias re rename alias w window alias kr "rm -r ram:* >NIL: ### Ende von compat.sh ### Wenn eine Datei S:.login existiert, so wird diese beim Start jeder Shell 'gesourced'. Dies ist nützlich für alias-Kommandos und sonstige Einstellungen, die für alle Shells gelten sollen. ### Beispiel S:.login ### # Hier ein Beispiel für eine .login-Datei: # (Diese Datei wird für jede neue Shell 'gesourced'.) set F5 "cdir WORK:"^M set f9 "ed s:login.sh"^M set F9 "ed df0:s/startup-sequence"^M alias toram "%q foreach i ( $q ) \"cp -r $i: ram:$i >NIL:;assign $i: ram:$i alias ramop "md RAM:op; assign OP: ram:op alias noop "assign OP: ; rm -r ram:op alias newop "rm -r OP:* alias dc "dfc df0: to df1: alias go "%q assign WORK: Boot:$q; cd WORK:; source startme.sh alias get "%q cp $q RAM: >NIL: alias filter "%a%b%c exec $b \\<$a \\>$c # Startet Kommando $b mit Datei $a als Eingabe und schreibt Resultat in # Datei $c, Datenfluß: $a -> ($b) -> $c alias rm "%q \\rm @confirm( Remove $q ) # alias rm "%a set f @pickargs( $a );set opts @pickargs( $a );\ # e -n \'j\' um @words( @files( $f ) ) Datei und @words( @dirs( $f ) )\ # Ordner zu löschen\"? [n] \";input b;if $b = j;\\rm $opts $f;endif # # Für die Ängstlichen/Vorsichtigen unter uns: Dateien löschen mit Abfrage # # Achtung: das '\' muß das letzte Zeichen der Zeile sein !! set _prompt "%c%p> " # Dieses Kommando fügt den aktuellen Pfad hervorgehoben in den Prompt ein # Dieses Kommando sorgt für die Anzeige von CLI-Nummer, freiem Speicherplatz, # Datum und Zeit im Fenster-Titel set _titlebar "Shell %n Mem %m Date %d Time %t ### Ende Beispiel .login ### **************************************************************************** Als CLI-Benutzer könnte die 'startup-sequence' einfach folgendermaßen aussehen: C:Csh S:startup.sh Hier ein Beispiel für S:startup.sh: ### Beispiel S:startup.sh ### wind -l # Volle Bildschirmgröße eines PAL-Rechners nutzen # Bemerkung: Kommandos können abgekürzt werden # Hier: 'wind' für 'window' assign LC: Stuff:c INCLUDE: Stuff:include LIB: Boot:lib QUAD: RAM: rback C:FaccII; sleep 1 # Nach dem Starten eines Prozesses im Hintergrund ist es gut, # dem Rechner Zeit für das Laden des Kommandos zu geben, um # Nerven und Laufwerk zu schonen. resident -d blink lc1 lc2 >NIL: # verzögertes Laden von externen Kommandos C:PopCli 300 C:Newcli # Angabe des vollständigen Pfadnamens C:FF -1 Siesta.font >NIL: # beschleunigt die Ausführung C:Patch_1 >NIL: stack 8000 # Minimum für lc1 und lc1 source S:setdate.sh # dort geht's weiter ### Ende Beispiel startup.sh ### **************************************************************************** Nun folgt eine Beispiel 'source'-Datei, um das Datum und die Zeit zu setzen. Kann verwendet werden, wenn der Rechner keine interne Uhr besitzt. (z.B. A1000, A500) ### setdate.sh ### open CON:200/100/440/80/SetDate write 1 echo >.1 -n "Das aktuelle Datum ist " date >.1 echo >.1 -n "Bitte neues Datum eingeben: " input <.1 d close 1 strlen len $d if $len > 1 ; date $d ; endif echo -n "Das neue Datum ist: " ; date ### End of setdate.sh ### *************************************************************************** Hier ein 'Makefile', das ohne 'Make'-Programm auskommt: Es kann direkt von der Shell gestartet werden. (Anm. d. Ü.: 'MakeDatei's beinhalten Informationen darüber, welche Datei(en) von welchen anderen Datei(en) abhängen, und wie die Datei aus der Datei neu erzeugt werden kann, wenn diese ein neueres Datum aufweist.) (Anm. d. Ü.: Wollte ich schon immer mal schreiben :-) ### make.sh ### if -t Shell.syms Shell.h; cc +HShell.syms Shell.h; rm shell.o; endif if -t RAM:Shell.syms Shell.syms; cp -d Shell.syms RAM:; endif foreach i ( main comm1 comm2 comm3 execom globals rawconsole run set \ sub ) "if -t $i.o $i.c; echo Compile $i...;cc +IRAM:shell.syms $i.c; endif" # Die Fortsetzung einer Zeile in der nächsten Zeile (mit '\') wurde aus # Gründen der Übersichtlichkeit angewendet. # Dies ist jedoch nicht notwendig; kann auch alles in eine Zeile # geschreiben werden, da kein Limit von 256 Zeichen pro Zeile mehr besteht. if -t Shell run.o main.o comm1.o comm2.o comm3.o execom.o \ set.o sub.o globals.o rawconsole.o ln +q -m -o Shell run.o main.o comm1.o comm2.o comm3.o\ execom.o set.o sub.o globals.o rawconsole.o -la -lc endif ### Ende von make.sh ### XIII. Vorgabe Werte -------------------- Einige Aliase sind vordefiniert wenn eine neue Shell gestartet wird, dies sind: CDIR Ein cdir bewirkt: Löschen des CLI-Fensters,Wechsel zum angegebenen Ordner und Auflistung des Inhalts. CLS CLI-Fenster löschen. (Auch im Terminal-Modus) DSWAP Wechsel zwischen aktuellem und vorherigen Ordner. Sollte in Skripten verwendet werden, da das Sonderzeichen für das vorherige Ordner sich möglicherweise ändern wird. EXIT Csh verlassen und CLI beenden. MANLIST Ausgabe einer Liste aller möglichen Argumente (also Kommandos) für 'man'. Desweiteren sind einige Variablen und Funktionstasten vordefiniert. Mit dem 'set' Kommando können diese angesehen werden. XIV. Objektorientierte Eigenschaften ------------------------------------- Dateiklassen haben zwei nützliche Eigenschaften: 1. Die Identifizierung des Dateityps (Bild, Archiv, Animation, usw.) 2. Das Überladen ('overloading') von Kommandos. 'overloading' bedeutet den Gebrauch desselben Kommandos auf Dateien verschiedenen Typs, wobei die jeweils ausgeführten Aktionen von Typ zu Typ vollkommen unterschiedlich sein können. Der Sinn sollte durch die folgenden Beispiele klar werden. (Anm. d .Ü.: Wem diese Materie auf den ersten Blick zu kompliziert oder abstrakt erscheint, der sollte nicht gleich aufgeben, sondern mit dem Klassen-Mechanismus ein wenig herumspielen. Er kann sehr hilfreich sein.) DATEIKLASSEN Klassen von Dateien können mit Hilfe mehrerer 'class' Kommandos definiert werden, hier ein einfaches Beispiel: class bild suff=.pic suff=.iff suff=.ilbm class anim suff=.anim Nach Ausführung dieser Kommandos kann die Csh jede Datei mit den Suffixen .pic, .iff oder .ilbm als ein Bild (bild) identifizieren. Anmerkung: Es dürfen keine Leerzeichen zwischen den Namen und dem '=' stehen, Leerzeichen innerhalb des Namens müssen in Anführungszeichen stehen. Dies sind Möglichkeiten, eine Datei zu identifizieren: suff=.doc Erfüllt, wenn der Suffix der Datei '.doc' lautet name=readme Erfüllt, wenn der Name der Datei "readme" ist name="mod.*" Erfüllt, wenn der Name der Datei mit 'mod.' beginnt offs=14,DC..C4FD Erfüllt, wenn die Bytes beginnend mit Byte $14 lauten: $DC, , $C4, $FD (alle Zahlen hexadezimal!). Jedes Paar von Punkten ('..') steht für ein zu ignorierendes Byte . chars Erfüllt wenn 90% aller Bytes der Datei im Bereich 32..127 oder 9..13 liegen default Immer erfüllt, wird verwendet, um den Vorgabe-Typ zu definieren Anmerkung: Nur das erste Zeichen wird betrachtet, so steht z. B. 's' für 'suff'. Eine Klasse kann in mehr als einem 'class' Kommando spezifiziert werden. Die Identifizierung erfolgt in der gleichen Reihenfolge, in der die 'class' Kommandos eingegeben wurden. Um zum Beispiel sicherzustellen, daß ein irrtümlich mit dem Suffix '.lzh' benanntes 'zoo'-Archiv korrekt identifiziert wird, können die folgenden 'class' Kommandos verwendet werden: class zoo offs=14,DCA7C4FD class lzh offs=2,2D6C68..2D class zoo suff=.zoo class lzh suff=.lzh Es existiert auch eine eingebaute Klasse 'dir', die ein Ordner beschreibt. Zu diesem Zeitpunkt kennen wir verschiedene Typen von Dateien, aber was kann damit nun anfangen werden ? Dazu werden Aktionen (actions) benötigt, die im folgenden erläutert werden sollen. AKTIONEN UND AKTIONSDEFINITIONEN FÜR KLASSEN Für eine Klasse können die verschiedenen Aktionen in einem oder auch in mehreren 'class' Kommandos definiert werden. class zoo actions view="zoo -list" extr="zoo -extract" class lzh actions view="lz l" class lzh actions extr="lz e" Wenn nun versucht wird, mit der Aktion 'view' eine Datei 'test.zoo' anzusehen, so wird letztendlich die Befehlszeile 'zoo -list test.zoo' ausgeführt, Eine Datei 'test.lzh' aber wird mit 'lz l test.lzh' bei 'view test.lzh' interpretiert. Anmerkung: Jedes angegebene Kommando durchläuft den normalen Csh-Interpreter, d.h. AmigaDOS- and Csh-Pfade werden durchsucht. Aliases mit Argumenten sind auch erlaubt, alle vom Benutzer eingegebenen Argumente werden in die Variable hinter dem '%' gespeichert. Wie kann einer Datei nun mitgeteilt werden, daß angesehen ('view') werden soll ? Dies geschieht mit einem weiteren Kommando für objekt- orientierte Dateibearbeitung. Das Kommando action view test.zoo wird als erstes versuchen, den Typ der angegebenen Datei zu ermitteln, und dann - falls dies erfolgreich war - die 'view' Aktion auf die Datei anwenden. Diese Befehlsfolge kann durch die Gebrauch eines 'alias' vereinfacht werden: alias v "action view" definiert ein 'v' Kommando, mit dem alle der Csh bekannten Dateitypen angesehen werden können. alias xtr "action extr" definiert analog ein Kommando 'xtr' mit dem alle der Csh bekannten Archivtypen ausgepackt werden können. Es gibt eine Aktion, die an eine Datei geschickt wird, die gestartet wurde, aber nicht ausführbar ist (s. Kapitel VIII). Diese Aktion lautet 'exec'. Es sei eine Klasse 'picture' definiert, nach Eingabe von class picture actions view=Mostra exec=Mostra kann ein Bild mit Hilfe des Anzeigeprogramms 'Mostra' angesehen werden, indem einfach der Namen des Bildes eingegeben wird. Anmerkung: Die Namen für die Aktionen sind im allgemeinen frei wählbar, dabei bildet (s.o.) die Aktion 'exec' eine Ausnahme, weiterhin könnten zukünftig Aktionen wie 'rm' und 'dir' implemtiert werden, d.h. für eigene Aktionen sollten keine Namen eingebauter Funktionen verwendet werden. Die Source-Datei class.sh definiert ein paar nützliche Klassen. ÜBERKLASSEN Angenommen es existiert eine Klasse für .c Dateien, eine für .h Dateien und eine für .asm Dateien. Diese wollen unterschieden werden aber letzten Endes sind es doch alles ASCII Dateien. Das kann wie folgt festgelegt werden: class c_source suff=.c is=ascii Wenn jetzt eine Aktion auf einer Datei des Tps c_source nicht ausgeführt werden kann, dann wird die Datei vom Typ ascii intepretiert, und dieselbe Aktion wird erneut ausgeführt. Dies geschieht solange, bis eine Klasse keine Überklasse mehr besitzt. XV. Keymaps (Tastaturbelegungen) -------------------------------- Eine Keymap wird als eine Sammlung von 'Taste-Funktion'-Paaren definiert. Beide werden durch eine Nummer identifiziert. Es kann mehrere Keymaps geben, die sich gegenseitig aktivieren können, am Anfang werden wir uns aber auf Keymap 0 beziehen. Dies ist die Keymap, die bei Shell-Start aktiv ist. Alle vom Benutzer definierten Tasten überschreiben möglicherweise alte Definitionen der entsprechenden keymap. Alle mit (*) markierten Funktionen sind bisher nicht implementiert. TASTENKODES 1..255 Das entsprechende ASCII-Zeichen 256 Pfeil nach oben 257 Pfeil nach unten 258 Pfeil nach rechts 259 Pfeil nach links 260 'Help'-Taste 261..270 F1..F10 (ohne Shift) Modifiers , also Shift, Alt, Amiga, Ctrl (zum Tastaturcode addieren) 512 SHIFT (nur notwendig für Pfeile und Funktionstasten) 1024 ESC (wenn gedrückt und losgelassen vor Taste) EDITORFUNkTIONEN - Bewegungen bewege Cursor ... 0 CursLeft 1 links 1 CursRight 1 rechts 2 WordLeft 1 Wort links 3 WordRight 1 Wort rechts 4 BegOfLine an den Anfang der Zeile 5 EndOfLine an das Ende der Zeile - Löschen lösche ... 10 Backspace Zeichen links vom Cursor 11 Delete Zeichen rechts vom Cursor 12 BkspcWord Wort links vom Cursor 13 DelWord Wort rechts vom Cursor 14 DeleteToSOL vom Anfang der Zeile bis Cursor 15 DeleteToEOL von Cursor bis Ende der Zeils 16 DeleteLine ganze Zeile - aus Kommandospeicher einfügen 20 Back Vorherige Zeile holen 21 Forward Nächste Zeile holen 22 Beg Erste Zeile aus Kommandospeicher holen 23 End Letze Zeile aus Kommandospeicher holen 24 Complete Zeile aus dem Kommandospeicher vervollständigen (wie '!') 25 Exec Kommandospeicher-Zeile ausführen und nächste Zeile holen 26 Tail Vorherige Zeile holen, dabei erstes Wort weglassen 27 Bottom Eine Zeile weiter als letzte Kommandospeicher-Zeile nach unten 28 DupWord Letztes Wort der aktuellen Zeile verdoppeln - Completion (Dateinamen vervollständigen) 30 Normal Erstes passendes Wort einfügen bzw. zum nächsten Wort 31 Partial Alle Dateien einfügen, die die Zeichenkette enthalten 32 All Alle passenden Dateien einfügen 33 Ordner Ordnernamen aus Tabelle (qcd) holen 34 LastCD Vorherigen Ordner einfügen 35 Show Alle passenden Dateien auflisten - Spezielles 40 Insert Umschaltung Überschreiben/Einfügen 41 Quit Shell beenden 42 Help Help aufrufen 43 Refresh Aktuelle Zeile neu schreiben 44 Execute Aktuelle Zeile ausführen 45 Leave Aktuelle Zeile in Kommandospeicher speichern, weiter mit neuer Zeile 46 EOF Shell beenden bzw. Dateiende anzeigen 47 NOP (No OPeration) keine Aktion 48 Echo^O ^O ausgeben 49 Beep ^G ausgeben - Sonstiges 50 Fkey Kommando der letzten Funktionstaste ausführen 51 Menu Kommando der letzten Menüfunktion ausführen 52 Undo Letztes Edierkommando wiederholen 53 Repeat Letzte Funktion wiederholen 54 SwapChar Die beiden Zeichen links vom Cursor vertauschen Kommandotypen 0 +x Funktion mit Nummer 'x' gemäß obiger Liste 512 +x Auf Keymap Nummer 'x' umschalten , x=0..7 1024+x Zeichen mit ASCII-Nummer 'x' einfügen , x=1..255 1536+x Makro x ausführen , x=1..15 (*) 2048+x Zeichenkette x einfügen , x=1..15 (*) Beispiel: keymap 0 66=49 # B = Piepton keymap 0 2=16 # ^B = Zeile löschen keymap 0 1122=35 # ESC-b = passende Dateien auflisten # 1122 = 1024(ESC) + 98(b) keymap 0 771=4 # Shift- = Zeilenanfang # 771 = 512(Shift) + 259() keymap 0 770=5 # Shift- = Zeilenende GLOSSAR ------- Alias Ein alternativer Name für ein Kommando oder Kommandoabfolge die mit dem Alias Kommando spezifiziert wird. Application Allgemein ein Programmpaket, etwa DPaint. Archive Eine Kopie/Backup einer Datei, Meist ist das Archive-Bit gemeint, welches angibt, ob von der Datei bereits eine Sicherheitskopie gemacht wurde. Argument Eine zusätzliche Information, die an ein Kommando übergeben wird, wie etwa Dateiname, Werte oder Optionen. ASCII American Standard Code for Information Interchange, Standard für Computerzeichensätze. Assign Eine Verbindung eines physikalischen Ordners zu einem logischen Gerätenamens. Etwa RAM:T ist meist als T: bekannt. Backup Eine Kopie einer Datei auf einem physikalisch externen Gerät, z.B. Streamer, Diskette. Binary Binäres (dual) Zahlensystem, hier ist aber oft eine Datei gemeint die auch non-Ascii Zeichen enthält (Zeichen mit Ascii-Kode >128), etwa ausführbare Programme. Bit (engl. 'ein bißchen') Binäre Einheit, hier oft als Flag, also Vorzeichen gemeint. Block Serie von 512 Bytes auf Gerät. Byte Speichereinheit von 8 Bits Länge, normal genau die Information für ein Zeichen. Chip Hiermit ist der Speicherbereich gemeint, der auf dem Amiga den Customchips zu verfügung steht. Auch als Grafikspeicher bekannt. Meist 1 MB RAM (A500, A2000) oder 2 MB (A3000,A500+). CLI Command Line Interface. Damit ist das Programm gemeint, welches überhaupt die Kommunikation per Tastatur mit dem Rechner ermöglicht (Shell). Compiler Programm, welches ein rohes Programm in einer höheren Sprache, etwa C, geschrieben, in eine dem Rechner tatsächlich verständliche Instruktionsfolge übersezt. Cursor Die kleine rechteckige Farbmarkierung, unter der die magischen Zeichen erscheinen. Default Vorgabewert, Vorgabezustand. Delete Physikalisch Löschen, entfernen. Device Siehe Gerät. Directory Verzeichniss. Ordner. Schublade. Ablage im Dateibaum. DOS Disk Operating System. Eigentliches Betriebsystem. Ermöglicht erst die Dateioperationen. Editor Programm um Texte einzugeben, etwa ED. Environment Variable Eine Variable in der ein Wert oder eine Zeichenkette temporär abgespeichert werden kann. Fast Genereller Speicher des Amigas. Kann von den Custom Chips nicht angesprochen werden. File Datei, Folge von Zeichen. Flag Vorzeichen, Indikator für bestimmten Status. Gb Gigabyte, 1024 Megabytes. (1 Milliarde Zeichen) Gerät Physikalischer Mechanismus, etwa Diskette DF0: oder aber auch logische Einheit wie RAM: um Daten abzuspeichern oder zu laden. Hard Disk Festplatte. Moderner, schneller Massenspeicher. Abk. HD. Hexadezimal Auf dem 16-er System basierendes Zahlensystem. Zahlen größer 9 werden durch die Zeichen A-F gegeben. Eigentlich grie. Sedesimal. History Kommando(Vergangenheits)speicher. Liste mit den zuletzt ausgeführten Kommandos. Kb Kilobyte, 1024 Bytes. Keymap Tastaturbelegung, ist auf dem Amiga variabel. Kickstart Oft auch als ROM bezeichnet. Bei alten Amigas per Diskette zu laden, beinhält grundlegende Software. Link Zeiger, Verbindung auf eine Datei. Lokal Nur innerhalb einer Prozedur gültige Option, Variable. Mb Megabyte, 1024 Kb (1 Million Zeichen) Memory Speicher. Menu Liste von Auf-dem-Schirm Optionen. Mit dem Menuknopf (Rechte Maustaste) erhältliche Optionenliste. Menu Item Option im Menu. Menupunkt. Multitasking Stärke des Amigas. Hiermit wird die Fähigkeit bezeichnet, mehrere Programme scheinbar gleichzeitig auszuführen. Offset Hier ist damit eine Folge von Bytes gemeint. Partition Einteilung auf Festplatte, die somit mehrere logische Geräte zur Verfügung stellt. Path Pfad. Weg innerhalb des Dateibaums von Wurzel zu Blatt, hier Datei. Auch Suchpfad, also Zeichenkette, die mehrere Pfade beinhält, die angibt wo Programme bei Aufruf zu suchen sind. Pattern Suchmuster. Pipe (engl. Rohr) Datenstrom, dieser kann von einem Programm an das Nächste übergeben werden. Process Task, laufendes Programm. Folge von Instruktionen. Prompt Eingabeaufforderungstext. Etwa 1>: Pure Ein Sicherheits-Bit, welches angibt ob ein Programm resident geladen werden kann. Muss vom Compiler unterstüzt werden. RAM Random Access Memory. Generel zugängiger Speicher. RAM Disk Logisches Gerät im Speicher. Ist dynamisch aufgebaut. Nur durch Speicherkapazität begrenzt. Requester Fenster in dem eine Datei interaktiv spezifiziert weden kann. Resident Ein Programm kann in den Speicher geladen werden, es wird dann nur noch direkt im Speicher aufgerufen, braucht nicht mehr erneut geladen werden. Enormer Zeitvorteil bei oft vorkommenden Programmen. Return Kode Rückgabewert von Programmen oder Stapeldateien. Damit kann auf erfolgreichen Durchlauf eines Programms gecheckt werden. ROM Read Only Memory. Speicherbereich, der nicht gelöscht oder beschrieben werden kann, Beinhält normal ein grundlegendes Betriebsystem. Screen Grafische Fähigkeit des Amigas. Es können mehrere solcher Schirme, auch mit verschiedenen Auflösungen geöffnet werden. Scroll Verschieben eines Textes nach oben (oder generell in eine Richtung). Shell (engl. Muschel, Umgebung) Erweiterter CLI. Programm zur Kommunikation mit dem Computer. Source Quellkode. Hier ist damit aber der Vorgang gemeint, eine Stapeldatei zu interpretieren und ablaufen zu lassen. Stack Ein spezieller Bereich des RAMs der allen Programmen für temporäre Speicherung dient. Stapeldatei Abfolge von Kommandos die in einer Datei zusammengefasst sind. Dies ermöglicht auch eine Steuerung durch Sprungmarken und Schleifen. String Zeichenkette. Suchmuster Vorgegebenes Muster nach dem etwas durchsucht werden soll. Platzhalter und Kriterien. Syntax Grammatik. Regel. Volume Gerätename. (Etwa Workbench:) Workbench Graphische Benutzeroberfläche des Amigas. Zeichenkette Folge von Zeichen. Intern duch ein Null-Zeichen abgeschlossen. Kann auch eine Matrix beinhalten. QED.