home *** CD-ROM | disk | FTP | other *** search
/ SPACE 2 / SPACE - Library 2 - Volume 1.iso / program / 590 / doc / okami.doc < prev    next >
Encoding:
Text File  |  1992-01-06  |  72.9 KB  |  1,780 lines

  1.     ===============================================
  2.  
  3. @(#)      OKAMI SHELL VERSION 1.4 - BENUTZERANLEITUNG
  4.  
  5.     ===============================================
  6.                 Stand: 13.12.91
  7.  
  8.  
  9.         BITTE ERST DIE DATEI README LESEN!
  10.  
  11. ----------------------------------------------------------------------------
  12. EINFÜHRUNG
  13.  
  14. Die Okami-Shell (man spricht es "O-Kammi") ist ein (weiterer) Versuch,
  15. auf dem Atari ST so etwas wie Unix-Gefühle aufkommen zu lassen. Das
  16. Programm wendet sich an alle, die die Möglichkeiten eines Kommandoin-
  17. terpreters denen des Desktops vorziehen. Die Shell ist vor allem beim
  18. Betrieb mit einer Festplatte ausgesprochen nützlich.
  19.  
  20. Obwohl es schon einige Programme dieser Art gibt, gibt es gewichtige
  21. Gründe, die Okami-Shell zu benutzen und sich durch die folgende Anlei-
  22. tung zu arbeiten.
  23.  
  24. Die Okami-Shell ist einer der Unix-orientierten Kommandointerpreter für
  25. den ST, der die Unix-Möglichkeiten der Ein/Ausgabe-Umleitung und des
  26. Pipelinings auch für die internen (in der Shell eingebauten) Kommandos
  27. ermöglicht. Die Ein/Ausgabe-Umleitung ist die Möglichkeit, die Standard-
  28. Ausgabe eines Programmes, d.h. alles, was mit printf etc. ausgegeben
  29. wird und normalerweise auf dem Bildschirm landet, sowie die Standard-
  30. Eingabe in eine Datei oder zu einem Gerät (z.B. zum Drucker) umzulei-
  31. ten. Die Umleitung funktio niert unter TOS mit dem GEM-Desktop a) nur
  32. bei TTP-Programmen, weil man nur bei diesen die Möglichkeit hat, eine
  33. Kommandozeile einzugeben, und b) nur bei Programmen, deren Compiler
  34. die Umleitung unterstützen. Die Okami-Shell führt die Umleitung selber
  35. durch, wodurch auch Programme, die ihre Kommandozeile nicht beachten
  36. (z.B. solche, die mit dem Pd-Modula-2-System erstellt wurden), umgeleitet
  37. werden können.
  38.  
  39. Die Okami-Shell kann allerdings noch etwas mehr: sie ist ein universelles
  40. Utility, mit dem man nicht nur Programme starten, sondern auch Pro-
  41. gramme schreiben und debuggen usw. kann. Als Bonbon hat sie einen
  42. eingebauten UPN-Rechner mit ca. 80 Funktionen sowie einen Terminal-
  43. Emulator. Alles in allem bietet die Okami-Shell mehr interne Kommandos
  44. und Funktionen als jede andere für den Atari erhältliche Shell.
  45.  
  46. Bei der Programmierung einer Shell oder eines Kommandointerpreters
  47. steht man immer vor der Frage, ob man für die in der Shell eingebauten
  48. Kommandos Unix-, MS-DOS- oder eine selbstausgedachte Schreibweise
  49. benutzen soll, d.h. ob man die Kommandos ls oder dir, mv oder rename,
  50. cp oder copy nennen soll oder ob man sich eingene Kommandonamen
  51. ausdenkt. Die Okami-Shell ist an den Unix-Bezeichnungen orientiert, ge-
  52. nauer gesagt an dem Unix-Derivat AIX, das z.B. auf dem IBM RT PC
  53. 6150 läuft. Natürlich müssen bei soetwas Abstriche gemacht werden, der
  54. Atari ist schließlich keine Unix-Maschine, und eine Shell ist kein Be-
  55. triebssystem.
  56.  
  57.  
  58. Wer sich in Unix einigermaßen auskennt, kann mit der Okami-Shell sofort
  59. loslegen. Die folgende Anleitung stellt die Verwendung der Shell dar, die
  60. Erklärung der internen Kommandos mit Syntax befindet sich in der Datei
  61. commands.doc.
  62.  
  63.  
  64. Um die vielen Versionen der Shell unterscheiden zu können, gibt das
  65. Kommando `ver' eine Information mit Versionsnummer und Kompilierungs-
  66. zeitpunkt aus. Zur Interpretation der Versionsnummer siehe tricks.doc.
  67.  
  68.  
  69.  
  70. ----------------------------------------------------------------------------
  71. SUPPORT
  72.  
  73. Die Okami-Shell ist Public Domain, d.h. sie kann von jedermann benutzt
  74. und weitergegeben werden, ohne daß jemand etwas dafür zu bezahlen
  75. hat. Wer über E-Mail zu erreichen ist, sollte mir über das Maus- oder
  76. Usenet eine kleine Nachricht, evtl. mit Kommentaren, Anregungen und
  77. Kritik, zukommen lassen. Adresse siehe unten.
  78.  
  79. Über den Support ist es jederzeit und für jeden möglich:
  80. 1) die neueste Version der Shell zu bekommen,
  81. 2) konfektionierte  Versionen zu erhalten, in denen die Systembeschrän-
  82. kungen (Anzahl der Variablen, Funktionen etc.) verändert sind. Wer also
  83. eine Version braucht, die bis zu 2000 Variablen verwalten kann, kann ei-
  84. ne solche bekommen. Außerdem können beliebige Kommandos ausgeblen-
  85. det werden, um die Shell kleiner zu machen. Wer also z.B. den UPN-
  86. Rechner und das basep-Kommando nicht braucht, kann eine Shell erhal-
  87. ten, in der diese Kommandos nicht enthalten sind und die somit entspre-
  88. chend kürzer ist.
  89. 3) Außerdem ist eine "CLI-Only"-Version erhältlich, die nur die allerwich-
  90. tigsten Kommandos zur Bedienung der Shell enthält. Diese Version ist un-
  91. gepackt ca. 63 KB groß (die Vollversion ca. 130 KB) und kann auf Syste-
  92. men eingesetzt werden, auf denen die wichtigsten Kommandos als externe
  93. Programme zur Verfügung stehen.
  94.  
  95. Es ist verboten, die Shell zu verkaufen oder unter einem anderen Namen
  96. zu vertreiben. Wer irgendwelche Teile des Programms oder der Quellen
  97. in eigenen Programmen benutzen will, darf dies tun, solange mein Name
  98. im Programm und in der Dokumentation erwähnt wird.
  99. Die Datei `copying' enthält genaue Hinweise zum Kopieren und Weiterge-
  100. ben der Shell.
  101.  
  102. Das Programm wird voll unterstützt, d.h. es wird dynamisch weiterentwik-
  103. kelt, und jeder Anwender kann bei mir jederzeit die neueste Version be-
  104. stellen. Ebenso stehe ich bei Problemen und Wünschen zur Verfügung.
  105. Spenden sind natürlich auch willkommen, aber ausdrücklich nicht Vorraus-
  106. setzung für den Erwerb von neuen Versionen, Anleitungen oder sonstigen
  107. Hilfen (dies ist allen Pd-Programmierern zur Nachahmung empfohlen).
  108.  
  109. Meine Adresse:
  110.  
  111.     Wolfram Rösler
  112.     Augustastr. 44-46
  113.     D-5100 Aachen
  114.     Tel. +49 (0)241 534596 oder +49 (0)241 504290
  115.     Mausnetz: Wolfram Roesler @ AC2
  116.     Usenet:    wr@bara.oche.de
  117.  
  118. Bei dieser Adresse kann für 15 DM eine gedruckte Version der Anleitung
  119. bezogen werden.
  120. Bitte bei allen Zuschriften die Versionsnummer und das Kompilierungsda-
  121. tum der Shell angeben (werden durch Eingabe von "ver" ausgegeben). Bei
  122. Fehlermeldungen bitte die Ausgabe von "ver -a" mitschicken.
  123.  
  124. Wer irgendwelche Anregungen für weitere Versionen der Shell hat, kann
  125. sich damit jederzeit an mich wenden.
  126.  
  127.  
  128. ----------------------------------------------------------------------------
  129. PROGRAMMFEHLER
  130.  
  131. "Selbst der  umsichtigste Programmierer kommt manchmal in    Situa-
  132. tionen, wo das Programm nicht richtig funktioniert."
  133.              Texas Instuments, "Individuelles Programmieren"
  134.              Handbuch zu TI 58/58C/59, 1977
  135.  
  136. Der Software-Support deckt die Beseitigung von Fehlern in der Shell ab.
  137. Wer einen Fehler findet, sollte also nicht die Okami-Diskette in die Ecke
  138. schmeißen und sich einer anderen Shell zuwenden (die hat nämlich auch
  139. Fehler), sondern mir einen Hinweis mit möglichst genauer Fehlerbeschrei-
  140. bung schicken. Wenn man eine Diskette und Rückporto beilegt, bekommt
  141. man die korrigierte Version der Shell sobald wie möglich zurück. Wenn
  142. die Shell in Verbindung mit einem anderen Programm Probleme macht,
  143. sollte man dieses Programm gleich mitschicken. Bitte bei allen Fehlermel-
  144. dungen die Ausgabe von "ver -a" mitschicken.
  145. Natürlich kann ich keine Verantwortung für irgendwelche Schäden, die
  146. durch die Shell, ihre Anwendung oder die Unfähigkeit ihrer Anwendung
  147. verursacht werden, übernehmen. Wer also unbedingt
  148.     df -mn | xargs rm -r {}/*
  149. ausprobieren muß, hat das Ergebnis selber auszubaden. 
  150.  
  151.  
  152. ----------------------------------------------------------------------------
  153. LIEFERUMFANG
  154.  
  155. Zur Okami-Shell gehören die folgenden Dateien:
  156.  
  157.     KERN:
  158.     sh.ttp        Das Haupt-Shellprogramm.
  159.     msh.prg     Die Microshell zum Starten als GEM-Programm.
  160.     msh.inf     Konfigurationsdatei zur Microshell.
  161.     profile     Konfigurationsdatei beim Start der Shell.
  162.     help        Textdatei mit Syntaxerklärungen.
  163.     EXTERNE KOMMANDOS:
  164.     calc.sh     Benutzerschnittstelle zum eingebauten UPN-Rechner.
  165.     format.ttp    Programm zum Formatieren von Disketten.
  166.     gem.prg     Programm zur Benutzung von Accessories.
  167.     gem.rsc    Resourcedatei dazu.
  168.     showpic.sh    Demo-Shellscript zur Anzeige von Bilddateien.
  169.     QUELLEN:
  170.     msh.c        msh.prg
  171.     gem.c        gem.prg
  172.     format.c    format.ttp
  173.     system.c    Zum Einbinden der Shell in eigene Programme.
  174.     DOKUMENTATION:
  175.     readme    Grundeinführung für den Anwender.
  176.     doc\*.*     Anleitungen.
  177.     SONSTIGES:
  178.     dial.inf    Eine Beispieldatei für das dial-Kommando.
  179.     okami.pic    Das Titelbild.
  180.     okami.dbl    Ein Icon mit dem Okami-Schriftzeichen zum Einbau 
  181.             in eine Icondesk-Datei.
  182.     _index    Indexdatei für `ls -i'.
  183.  
  184.  
  185. Alle ausführbaren Programme wurden mit dem Programm-Packer von Th.
  186. Quester und M. Fritze gepackt.
  187.  
  188. ----------------------------------------------------------------------------
  189. SYSTEMANFORDERUNGEN
  190.  
  191. "Wie der Name unschwer erkennen läßt, besitzt der Atari 520 ST
  192. einen enormen Hauptspeicher, nämlich ganze 512 KByte. Der eine
  193. oder andere kann sich vielleicht schwer vorstellen, wozu dieser Rie-
  194. senspeicher benötigt wird."
  195.                 Data Becker, "Das große GEM-Buch" (1985)
  196.  
  197. Die Okami-Shell stellt folgende Anforderungen an das System:
  198.  
  199. Rechner
  200. Läuft auf ST, TT usw.
  201. RAM
  202. Die Shell benötigt ca. 200 KB an Laufzeitspeicher => lauffähig auch
  203. auf 512KB-Maschinen. Empfohlen werden allerdings 1 MB oder
  204. mehr.
  205. Massespeicher
  206. Für die zum Lauf notwendigen Dateien werden minimal ca. 120 KB
  207. benötigt. Mit allen Hilfsdateien (Microshell, Profile,...) werden ca.
  208. 200 KB benötigt. Dazu kommen noch die über 300 KB für die Do-
  209. kumentation.
  210. Die Shell kann jedem Massespeicher betrieben werden. Für die Ver-
  211. wendung des Pipelinings ist es jedoch notwendig, daß auf einen
  212. Massespeicher (nicht notwendigerweise den, von dem die Shell ge-
  213. startet wurde) geschrieben werden kann. Für diesen Zweck kann
  214. auch eine eigene kleine Ramdisk angelegt werden (16-32K).
  215. Bildschirm
  216. Läuft fehlerfrei in hoher und mittlerer Auflösung. Der Betrieb in
  217. niedriger Auflösung ist möglich, aber einige interne Kommandos ge-
  218. hen davon aus, das pro Zeile 80 Zeichen zur Verfügung stehen (z.B.
  219. df und hd). Die Benutzung dieser Kommandos kann dann zu Störun-
  220. gen in der Bildschirmausgabe führen. In keinem Fall kommt es je-
  221. doch zu einem Programmabsturz.
  222. Sollte mit jeder Farb- und Schwarzweiß-Emulation funktionieren.
  223. Sollte auch mit allen Großbildschirm arbeiten (ungetestet mangels
  224. Großbildschirm). Die Shell unterstützt OverScan (siehe
  225. commands.doc zu dem internen Kommando "overscan").
  226. Hardware
  227. Die Shell unterstützt Maus, Drucker und die RS232-Schnittstelle so-
  228. wie ein Modem. Es werden jedoch keine Geräte außer Bildschirm
  229. und Tastatur unbedingt benötigt (auch nicht die Maus). (Genauge-
  230. nommen werden nicht einmal Bildschirm und Tastatur unbedingt be-
  231. nötigt.)
  232. Betriebssystem
  233. Die Shell wurde unter TOS 1.2 und 1.4 auf einem Atari 1040 ST und
  234. Mega ST4 entwickelt und ist "sauber" programmiert, d.h. es erfolgt
  235. kein Zugriff auf undokumentierte oder veränderliche Systemadressen
  236. o.ä. Die Shell sollte daher mit jedem früheren und zukünftigen TOS
  237. zusammenarbeiten (abgesehen von Betriebssystemfehlern.)
  238. Software
  239. Jedes TOS- und TTP-Programm kann von der Shell als externes
  240. Kommando aufgerufen werden. GEM-Programme können aufgerufen
  241. werden, wenn die Shell selber als GEM-Programm gestartet wird,
  242. was z.B. der Fall ist, wenn msh.prg zum Start der Shell benutzt
  243. wird.
  244. Zum Verändern der Konfigurationsdateien profile und msh.inf ist ein
  245. Ascii-Editor erforderlich.
  246.  
  247. ----------------------------------------------------------------------------
  248. INSTALLATION
  249.  
  250. Die Okami-Shell kann direkt von der Diskette gestartet werden. Siehe
  251. hierzu den folgenden Abschnitt.
  252. Ihre volle Effizienz entwickelt die Shell allerdings erst beim Einsatz von
  253. der Ramdisk oder Festplatte.
  254.  
  255.  
  256. INSTALLATION AUF RAMDISK
  257.  
  258. Ich empfehle die selbstkomprimierende Maxidisk, da sie die optimale
  259. Speicher ausnutzung garantiert. Für die Shell sollten mindestens 200 KB
  260. Maxidisk oder ca. 300 KB einer anderen Ramdisk zur Verfügung stehen.
  261.  
  262. Für den vollen Betrieb der Shell sollten folgende Dateien (am besten in
  263. einen eigenen Ordner) auf die Ramdisk kopiert werden:
  264.  
  265.     sh.ttp
  266.     profile
  267.     msh.prg
  268.     msh.inf
  269.     help
  270.     okami.pic
  271.     dial.inf
  272.     _index
  273.   in einem Unterordner namens doc:
  274.     commands.doc         <------ aus dem Anleitungsordner
  275.   in einem Unterordner namens bin:
  276.     *.sh
  277.     format.ttp
  278.     gem.prg
  279.     gem.rsc
  280.     ship.exe         <------ für Festplattenbenutzer: das
  281.                      ship.prg der Harddisk-Utility-Disk
  282.  
  283.  
  284. Die Datei help wird für das Shell-Kommando "help" benutzt; wer diese
  285. Datei ausdruckt und neben den Rechner legt, kann sich den Platz auf der
  286. Ramdisk ebenfalls sparen. Dasselbe gilt für commands.doc, das außerdem
  287. ziemlich viel Platz beansprucht. (Auf der Platte - auf dem Papier aller-
  288. dings auch, außerdem wird commands.doc für die Online-Hilfe benötigt.)
  289. Die Dateien msh.prg und msh.inf gehören zusammen und werden zum
  290. Start der Shell als GEM-Programm benutzt. Wer von der Shell keine
  291. GEM-Programme starten will, braucht diese Dateien nicht.
  292. Auf die externen Kommandos wie gem und format kann man natürlich
  293. auch verzichten, nur muß man dann u.U. etwas häufiger ins Desktop zu-
  294. rück.
  295. Wer kein Modem hat, kann mit dem dial-Kommando nichts anfangen und
  296. braucht folglich auch kein dial.inf.
  297. Wer nicht bei jedem Systemstart das Titelbild sehen möchte, kann die
  298. Datei okami.pic umbenennen oder löschen.
  299. Auch auf profile kann man verzichten, allerdings wird die Shell dann mit
  300. den eingebauten Voreinstellungen initialisiert.
  301. => Die einzige Datei, die man wirklich braucht, ist sh.ttp.
  302.  
  303.  
  304. INSTALLATION AUF FESTPLATTE
  305.  
  306. Bei der Installation der Shell auf Festplatte kommt echtes Unix-Feeling
  307. auf, vor allem wenn man die Shell nach dem Systemstart automatisch
  308. starten läßt (ich empfehle zum Autostart:
  309. TOS 1.0    den Autostarter aus dem Data Becker-Buch "Die besten
  310. Tips&Tricks für Atari ST", S. 24ff.
  311. TOS 1.2    den Autostarter "startgem.prg", der zu Superboot 6.0 ge-
  312. hört, siehe PD-Journal 9/90, S. 43ff.
  313. >= TOS 1.4     msh.prg im Desktop als Autostart-Applikation anmelden)
  314.     
  315. Mit einigen Tricks, die im folgenden erklärt werden, kann man sich z.B.
  316. bei jedem Start der Shell Datum und Uhrzeit des letzten Systemstarts
  317. ausgeben lassen oder das aktuelle Arbeitsverzeichnis so einstellen, wie
  318. man die Shell zuletzt verlassen hat. Außerdem kann man alle Programme,
  319. die man auf der Festplatte hat, per Name starten lassen, egal in wel-
  320. chem Verzeichnis man sich gerade befindet, und es werden sogar alle
  321. RSC-Dateien gefunden.
  322. Man tippt also z.B. ein:
  323.         edit datei.txt
  324. und es erscheint der Editor mit der Datei datei.txt, egal wo im Dateisys-
  325. tem der Editor sich befindet.
  326.  
  327. Für die Shell sollte ein eigener Ordner eingerichtet werden, in den die
  328. oben unter INSTALLATION AUF RAMDISK aufgeführten Dateien kopiert
  329. werden.
  330.  
  331. Außerdem ist es sinnvoll, eine kleine Ramdisk (16-32K) anzulegen und die
  332. Pipe-Operationen über diese laufen zu lassen. Siehe dazu weiter unten.
  333.  
  334. Wenn man sich die Anleitungen der Shell auf die Festplatte kopiert,
  335. braucht man die Datei commands.doc nicht noch einmal in den Shell-Ord-
  336. ner zu kopieren. Dann muß allerdings der Dateiname von commands.doc
  337. in der Shell-Variablen HELPFILE gespeichert werden. Siehe dazu weiter
  338. unten.
  339.  
  340. Wer sich sein Desktop mit Icondesk von Stefan Becker verschönert hat,
  341. kann die Icon-Datei okami.dbl direkt in die icons.img-Datei einbauen.
  342.  
  343.  
  344. INSTALLATION IM AUTO-ORDNER
  345.  
  346. Es ist sehr sinnvoll, ein kleines Programm zu schreiben, das im Auto-
  347. Ordner gestartet wird und, wenn eine bestimmte Taste gedrückt ist, die
  348. Shell per Pexec ausführt. Wenn dies das erste Programm im Auto-Ordner
  349. ist, hat man immer die Gelegenheit, vor dem Start irgendwelcher Pro-
  350. gramme in die Shell zu gelangen und so z.B. defekte Programme, die das
  351. korrekte Hochfahren des Systems verhindern, zu deaktivieren.
  352. Die Shell führt keine AES-Aufrufe aus, die beim Start aus dem Auto-Ord-
  353. ner zu Problemen führen würden, da zu dieser Zeit das AES noch nicht
  354. initialisiert ist. Die Shell führt AES-Aufrufe erst dann aus, wenn der An-
  355. wender sie durch Eingabe des Kommandos `gon' explizit dazu auffordert.
  356. Aus diesem Grund ist ein Betreiben der Shell aus dem Auto-Ordner pro-
  357. blemlos möglich.
  358.  
  359. INSTALLATION IM COOKIE-JAR
  360.  
  361.  
  362. Der Cookie-Jar ist eine Möglichkeit des Betriebssystems, mit der instal-
  363. lierte Programme dem System ihre Anwesenheit nebst Versionsnummer
  364. mitteilen können. Der Cookie-Jar wird erst ab TOS 1.6 vom Betriebssys-
  365. tem selber benutzt, kann aber bei allen früheren TOS-Versionen auch von
  366. Programmen installiert werden. Die Okami-Shell trägt sich unter der Ken-
  367. nung "OkSh" in den Cookie-Jar ein. Vorher installiert sie einen solchen,
  368. falls noch keiner vorhanden ist. Die Versionsnummer ist auf zwei Bytes
  369. aufgeteilt, bei Version 1.3 steht eine 3 im niedrigsten und eine 1 im
  370. nächsthöheren Byte.
  371. Mit dem internen Kommando `cookie' kann der Cookie-Jar ausgelesen
  372. werden. Siehe hierzu commands.doc.
  373. Wenn die Shell beendet wird, wird der vorherige Wert wieder als Cookie-
  374. jar-Adresse eingetragen. Beim Beenden der Shell mit shutdown wird als
  375. Cookiejar-Adresse 0 eingetragen.
  376.  
  377.  
  378. ----------------------------------------------------------------------------
  379. START DER SHELL
  380.  
  381. a) Direkt
  382.  
  383. Die Shell wertet ihre Kommandozeile nach der folgenden Syntax aus:
  384.  
  385.     [-] [Flags] [[-- | -c] Cmd [Parameter]]
  386.  
  387. Es bedeuten:
  388.  
  389. -
  390. Es wird die Datei profile im aktuellen Directory geladen. Wenn -
  391. nicht angegeben ist, wird keine Profile-Datei geladen. (In Unix wird
  392. das - als erstes Zeichen von argv[0] übergeben. Das läßt sich in
  393. TOS nicht bewerkstelligen, also muß das - in der Kommandozeile
  394. stehen.)
  395. Flags
  396. Beliebige der Flags, die auch für das Kommando set benutzt wer-
  397. den können und das Verhalten der Shell global beeinflussen. Die
  398. Flags können also schon in der Kommandozeile eingestellt werden,
  399. was nützlich ist, wenn kein Profile benutzt wird. Die Flags können
  400. mit + oder - beginnen. Siehe commands.doc für weitere Details.
  401. --
  402. Stellt das Ende der Flags dar und signalisiert, daß die weiteren Pa-
  403. rameter zu `Cmd' gehören. -- wird nur benötigt, wenn `Cmd' mit
  404. einem Minus- oder Pluszeichen beginnt.
  405. -c
  406. Signalisiert, daß es sich bei `Cmd' um ein auszuführendes Komman-
  407. do (intern oder extern) handelt. Wenn -c nicht benutzt wird, wird
  408. Cmd als der Dateiname eines auszuführenden Shellscripts betrachtet.
  409. Cmd
  410. Ein auszuführendes Kommando oder Shellscript. Wenn Cmd angege-
  411. ben ist, wird die Shell nach seiner Ausführung beendet. Wenn kein
  412. Cmd angegeben ist, wird die Shell interaktiv.
  413. Para
  414. Optionale Parameter für Cmd.
  415.  
  416. Anmerkung: Über den Software-Support kann eine Shell bezogen werden,
  417. die sich im Hinblick auf das übergebene Minuszeichen genau andersherum
  418. verhält, d.h. sie initialisiert sich mit dem Profile immer, außer es wird ein
  419. Minuszeichen übergeben.
  420.  
  421. Beispiele:
  422.  
  423. sh
  424. Die Shell wird interaktiv gestartet. Es wird kein Profile geladen.
  425.  
  426. sh -
  427. Die Shell wird interaktiv gestartet. Die Datei profile im aktuellen
  428. Directory oder (falls gesetzt) die in der Environment-Variablen
  429. OKSH_PROFILE angegebene Datei wird geladen. Dies ist der nor-
  430. male Start der Shell.
  431. sh - -i
  432. Die Shell wird interaktiv gestartet, die Datei profile wird geladen,
  433. und es wird der Insert-Modus des Zeileneditors abgeschaltet (-i).
  434. sh myscript
  435. Die Datei myscript wird als Shellscript ausgeführt, danach wird die
  436. Shell beendet.
  437. sh -x myscript
  438.  
  439. Die Datei myscript wird als Shellscript ausgeführt, danach wird die
  440. Shell beendet. Vorher wird das Flag x gelöscht, wodurch die Shell
  441. beim Start von Binärprogrammen das aktuelle Verzeichnis nicht auf
  442. das Verzeichnis einstellt, in dem die Programmdatei enthalten ist.
  443. sh -L <myscript
  444. Das Flag L wird gelöscht, wodurch die Shell Kommandos von der
  445. Standardeingabe (statt mit dem Zeileneditor von der Tastatur) ein-
  446. liest. Dadurch wird die Datei myscript ausgeführt. Diese Art des
  447. Startens eines Shellscripts unterscheidet sich nur geringfügig von
  448. dem direkten Angeben des Shellscripts und kann z.B. benutzt wer-
  449. den, um Kommandos von einer Pipeline oder einer Schnittstelle aus-
  450. zuführen.
  451. sh -c ver
  452. Die Shell führt das Kommando `ver' aus und terminiert.
  453.  
  454.  
  455. b) Indirekt
  456.  
  457. Die Shell kann indirekt von jedem Programm aus mit der GEMDOS-Funk-
  458. tion Pexec gestartet werden. Dies geschieht z.B. beim Aufruf von der Mi-
  459. croshell. Da die Shell den Environment-String benutzt, sollten Programme,
  460. die das nicht tun, als letzten Parameter von Pexec eine (long)0 überge-
  461. ben (und nicht einen Leerstring). Wenn der Shell dabei ein Parameter-
  462. string übergeben wird, so wird dieser wie oben beschrieben ausgeführt.
  463. Der Parameterstring kann der Shell auch nach dem xArg-Verfahren über-
  464. geben werden.
  465.  
  466. Wenn die Shell als Login-Shell gestartet werden soll und es möglich sein
  467. soll, GEM-Programme von der Shell aus zu starten, muß die Shell mit
  468. der Microshell (msh.prg) gestartet werden. Dazu müssen folgende Voraus-
  469. setzungen zutreffen:
  470. 1) Im selben Directory wie sh.ttp stehen die Dateien msh.prg und msh.inf.
  471. 2) Die Datei msh.inf enthält mindestens die folgende Zeile:
  472.     sh.ttp -
  473.  
  474. Dann wird die Shell nach Doppelklick auf msh.prg automatisch als Login-
  475. Shell gestartet. Es können alle GEM-Programme von der Shell aus ausge-
  476. führt werden. Siehe hierzu auch msh.doc.
  477.  
  478. Wenn die Shell auf diese Weise vom Desktop aus gestartet wird, sollte
  479. das Profile die Zeile
  480.     trap cursor -v
  481. enthalten. Dann wird nach dem Ende der Shell automatisch der Cursor
  482. abge schaltet (auf dem Desktop stört er ziemlich). Siehe hierzu auch
  483. commands.doc.
  484.  
  485.  
  486. c) Über den Shellpointer (_shell_p)
  487.  
  488. Der Shellpointer befindet sich in Adresse 0x4F6 und enthält einen Zeiger
  489. auf eine Funktion, die ein ihr übergebenes Kommando ausführt. Auf diese
  490. Weise ist es möglich, aus einem von der Shell gestarteten Programm aus
  491. Shellkommandos auszuführen, ohne daß die Shell nochmal geladen werden
  492. muß. Dies funktioniert z.B. mit Programmen wie Rufus oder der mitgelie-
  493. ferten system()-Funktion (siehe system.c und system.doc). Ein Beispiel für
  494. die Verwendung ist das mitgelieferte gem.prg.
  495.  
  496.  
  497. Die Funktion, deren Adresse in 0x4F6 hinterlegt wird, hat folgende Syn-
  498. tax:
  499.  
  500.     int Fct(cmd)
  501.     char *cmd;
  502.  
  503. cmd ist ein String mit dem auszuführenden Kommando. Dies kann ein be-
  504. liebiges Shell-Kommando sein. Mehrere Kommandos können durch `;' ver-
  505. kettet werden. Wenn ein leerer String oder ein NULL-Zeiger übergeben
  506. wird, arbeitet die Shell im Dialogmodus, ansonsten wird nur cmd ausge-
  507. führt. Zurückgegeben wird der Rückgabewert des Kommandos.
  508.  
  509. Achtung: Bei dieser Art des Aufrufes wird die bereits laufende Shell aus-
  510. geführt. Das bedeutet, daß alle Shellvariablen und Shellfunktionen der lau-
  511. fenden Shell benutzt und verändert werden können. Die vollständige Reen-
  512. tranz der Shell kann jedoch nicht garantiert werden. Insbesondere sollten
  513. mit einer auf diese Weise gestarteten interaktiven Shell keine externen
  514. Programme aufge rufen werden. (was allerdings teilweise möglich ist und
  515. von dem betreffenden Programm abhängt.)
  516.  
  517.  
  518.  
  519. ----------------------------------------------------------------------------
  520. KONFIGURATION
  521.  
  522. Wenn der Shell als einziger Parameter ein Minuszeichen übergeben wird,
  523. sucht sie nach dem Start im aktuellen Verzeichnis eine Datei mit dem
  524. Namen profile. Wenn die Environment-Variable OKSH_PROFILE gesetzt
  525. ist, wird stattdessen die in dieser Variable angegebene Datei benutzt.
  526. Wenn diese Datei vorhanden ist, wird sie wie ein Shellscript (siehe dazu
  527. weiter unten) ausgeführt. Das Profile kann eine Einschaltmeldung auf dem
  528. Bildschirm ausgeben und Shellvariablen wie z.B. das Prompt (PS1) setzen.
  529. Außerdem können die Shell-Flags eingestellt werden (siehe dazu das in-
  530. terne Kommando `set' in commands.doc). Das Profile kann alle Aktionen
  531. ausführen, die ein normales Shellscript auch ausführen kann.
  532. Siehe hierzu auch tricks.doc.
  533.  
  534.  
  535.  
  536.  
  537. ----------------------------------------------------------------------------
  538. KOMMANDOEINGABE
  539.  
  540. a) Von der Tastatur
  541.  
  542. Wenn die Shell im Dialogmodus gestartet ist, können nach dem Prompt
  543. (i.d.R. ein Dollarzeichen) Kommandos eingegeben werden. (Das mitgelie-
  544. ferte Profile stellt das Prompt um, so daß im Prompt immer das augen-
  545. blickliche aktuelle Directory zu sehen ist.)
  546.  
  547. Mit dem internen Kommando keydef kann jede beliebige Taste umdefiniert
  548. werden. Das bedeutet, daß alle der unten angeführten Tastenfunktionen
  549. ungültig werden können, wenn die jeweiligen Tasten redefiniert werden.
  550. Die einzigen Funktionen, die nicht umdefiniert werden können, sind
  551. ENTER und Ctrl Shift Undo. Für weitere Informationen siehe
  552. commands.doc zum Thema keydef.
  553.  
  554. Bei der Eingabe werden folgende Sondertasten benutzt:
  555.  
  556. Backspace
  557. bewegt den Cursor nach links und löscht das dort stehende Zeichen.
  558. Pfeil auf
  559. Es wird das zuletzt eingegebene Kommando angezeigt. Dieses kann
  560. mit ENTER übernommen oder mit Backspace editiert werden. Durch
  561. wiederholten Druck auf Pfeil auf wird das vorletzte Kommando an-
  562. gezeigt usw. Es werden maximal 100 Kommandos gespeichert (wer
  563. mehr braucht, benutze den Software-Support, um eine entsprechend
  564. angepaßte Version der Shell zu erhalten.) Diese Eigenschaft der
  565. Eingabe nennt man "History".
  566. Shift Pfeil auf
  567. Wie Pfeil auf, aber es wird die letzte Zeile aus der History ange-
  568. zeigt, die mit der bisherigen Eingabe übereinstimmt. Gibt man also
  569. ein "ls " und drückt Shift Pfeil auf, dann wird das letzte ls-Kom-
  570. mando zurückgeholt. Der Zeiger in der History-Liste steht dann hin-
  571. ter dieser Zeile, ein weiterer Druck auf Shift Pfeil Auf bringt also
  572. das vorletzte ls-Kommando zurück usw.
  573. Ctrl Pfeil auf
  574. Wie Pfeil auf gefolgt von einem Druck auf ENTER, es wird also
  575. das zuletzt eingegebene Kommando nicht nur angezeigt, sondern
  576. auch ausgeführt. Geht auch zusammen mit Shift.
  577. Pfeil ab
  578. Zeigt das nächste Kommando in der History-Liste an. Mit Pfeil auf
  579. und Pfeil ab kann man also in den in der History-Liste gespeicher-
  580. ten Kommandos blättern.
  581. Shift Pfeil ab
  582. Analog zu Shift Pfeil auf.
  583. Ctrl Pfeil ab
  584. Wie Pfeil ab gefolgt von einem Druck auf ENTER, analog zu Ctrl
  585. Pfeil auf.
  586. Shift Esc
  587. Dateinamen-Vervollständigung für alle Dateien, die auf ein Suchmus-
  588. ter passen. Siehe unten.
  589. Esc
  590. Dateinamen-Vervollständigung für eine Datei. Siehe unten.
  591. Pfeil links/rechts
  592. bewegen den Cursor: mit Shift zum Zeilenanfang/ende, mit Control
  593. jeweils ein Wort nach links/rechts, sonst jeweils ein Zeichen nach
  594. links/rechts.
  595.  
  596. Delete
  597. mit Control: löscht die Zeile von der Cursorposition bis zum Zeile-
  598. nende. Sonst: löscht das Zeichen unter dem Cursor.
  599. Shift Space
  600. Speichert die aktuelle Position für Pfeil rechts. Siehe unten.
  601. Clr Home
  602. Die Eingabezeile wird gelöscht.
  603. Help
  604. Es wird eine Erklärung des eingegebenen Kommandos ausgegeben.
  605. Siehe unten.
  606. Ctrl Shift Undo
  607. Für diese Eingabezeile wird die Tasten-Redefinition ausgeschaltet.
  608. Die Eingabe verhält sich also so, als ob seit dem Start der Shell
  609. keine keydef-Kommandos ausgeführt worden wären. Die Funktion
  610. wird durch ein Klingelzeichen bestätigt.
  611. Control F
  612. Es erscheint eine Fileselect-Box, der ausgewählte Dateiname wird in
  613. die Eingabe übernommen. Das geht nur, wenn gon aktiv ist (siehe
  614. commands.doc zum Stichwort gon).
  615. Control P
  616. Es wird Hardcopy ausgeführt. Dies geschieht durch Aufruf der
  617. Shellfunktion "screensave". Die Voreinstellung dieser Funktion ist ein
  618. einfacher Aufruf des internen Kommandos "hardcopy", wodurch der
  619. Bildschirminhalt auf dem Drucker ausgegeben wird. In der Datei
  620. tricks.doc ist eine screensave-Funktion angegeben, durch die die
  621. Hardcopy in eine Datei  geschrieben wird.
  622. Control A
  623. Der Bildschirm wird dunkelgeschaltet. Um diesen Modus anzuzeigen,
  624. läuft ein heller Streifen über den Bildschirm. Nach Druck auf eine
  625. der Shifttasten, Control oder Alternate kann man weiterarbeiten.
  626. Alternate Space
  627. Es werden Uhrzeit und Datum angezeigt, bis die Alternate-Taste
  628. losgelassen wird.
  629. Control D
  630. Die Shell wird beendet.
  631.  
  632.  
  633. Es können beliebige Ascii-Codes in der Schreibweise `^ooo' eingegeben
  634. werden, wobei ooo eine dreistellige Oktalzahl ist. Um z.B. ein Escape
  635. zeichen in eine Eingabe einzubauen:
  636.     echo "Jetzt kommt ein Esc: ^033 das war das Esc"
  637. Auf diese Weise können alle VT52-Sequenzen benutzt werden. Siehe auch
  638. `echo' in commands.doc.
  639.  
  640.  
  641. Dateinamen-Vervollständigung (Filename-Completion):
  642.  
  643. Die Shell bietet die Möglichkeit, nur einen Teil eines Dateinamens einzu
  644. geben und diesen dann zu dem vollen Dateinamen expandieren zu lassen.
  645. Dazu gibt es zwei Möglichkeiten:
  646.  
  647. 1) Nach Druck auf Taste Shift-Escape wird das zuletzt eingegebene Wort
  648. zu allen Dateinamen expandiert, die nach den Regeln der erweiterten
  649. Wildcards auf dieses Wort passen.
  650. Beispiel:
  651.  $ cat *.c<SHIFT ESC>
  652. erzeugt
  653.  $ cat sh.c cmds.c utl.c ...
  654.  
  655.  
  656. 2) Nach Druck auf die Taste ESC kann der Anwender aus den auf das
  657. letzte Wort passenden Dateien eine auswählen. Wenn nur eine Datei
  658. paßt, wird diese direkt übernommen, ansonsten kann eine Datei mit fol-
  659. genden Tasten ausgewählt werden:
  660. Pfeil li./re.        die jeweils nächste/vorige Datei.
  661. Pfeil auf/ab    zum Anfang/Ende der Liste.
  662. Leertaste        Dateilänge und Anzahl der passenden Dateien wer-
  663. den ausgegeben. Hierbei bedeutet `4/10' die vierte Datei
  664. von insgesamt zehn.
  665. Return        der gerade angezeigte Dateiname wird übernom-
  666. men.
  667. ESC            die Auswahl wird abgebrochen, die bisherige Einga-
  668. be bleibt unverändert.
  669. Clr Home        die Auswahl wird abgebrochen, das Suchmuster
  670. wird aus der Eingabe entfernt.
  671. Help            eine Tastenübersicht wird angezeigt.
  672.  
  673. Sowohl für Pfeil links als auch für ESC gilt, daß die Funktion des einge
  674. gebenen Wortes mit dem Shell-Flag f verändert werden kann. Wenn die-
  675. ses Flag gesetzt ist (set +f), dann stellt das eingegebene Wort ein Präfix
  676. dar, z.B. steht `abc' dann für alle Dateien, deren Name mit abc anfängt.
  677. Wenn das Flag f nicht gesetzt ist (set -f), steht das eingegebene Wort
  678. nur für die Dateien, die (nach den Regeln für erweiterte Wildcards) auf
  679. dieses Wort passen, `abc' steht dann also nur für die Datei abc.
  680.  
  681.  
  682. Zur Verwendung der Help-Taste:
  683.  
  684. Mit der Help-Taste kann jederzeit, und zwar ohne die Eingabe zu stören,
  685. zu einem Kommando die entsprechende Anleitung aus der Datei
  686. commands.doc oder einer anderen Hilfsdatei angezeigt werden. Will man
  687. z.B. eine Diskette formatieren, so tippt man das Kommando "format" ein
  688. und überlegt dann, wie die Parameter noch waren - dann hilft ein Druck
  689. auf Help, und es erscheint die Anleitung zu format.
  690. Anschließend kann die Eingabe fortgesetzt werden. Das funktioniert auch,
  691. wenn bereits Parameter nach format eingegeben worden sind.
  692. Wenn man die Help-Taste bei leerer Kommandozeile drückt, wird man
  693. nach dem zu erklärenden Kommando gefragt.
  694. Bei der Angabe des zu erklärenden Kommandos gelten die Regeln für er-
  695. weiterte Wildcards, d.h. mit "r*" wird das erste Kommando erklärt, das
  696. mit r beginnt usw.
  697.  
  698. Beispiel:
  699.  
  700. $ format A: <HELP>                      Eingabe
  701.  
  702. format - Formatieren von Disketten         Ausgabe
  703. ..... (usw.)
  704.  
  705. $ format A: *                          weiter gehts
  706.  
  707. (In diesem Beispiel steht <HELP> für das Drücken der Help-Taste und *
  708. für die Cursor-Position am Ende. $ ist das Shell-Prompt.)
  709.  
  710. Der Pfadname der Datei commands.doc muß in der Shell-Variablen
  711. HELPFILE gespeichert sein. Die Voreinstellung ist
  712.  
  713. $HOME\doc\commands.doc. Wenn die Variable HELPFILE nicht gesetzt
  714. ist, wird die Datei help.txt im aktuellen Directory benutzt.
  715.  
  716. Wenn das Stichwort in der in HELPFILE angegebenen Hilfsdatei nicht
  717. gefunden wird, sucht die Shell nach einer Datei folgenden Namens:
  718.  
  719.     pfad\name.ext
  720.  
  721. Pfad ist einer der in der Shell-Variablen MANPATH angegebenen Pfade,
  722. und ext ist einer der in der Shell-Variablen MANEXT angegebenen Exten-
  723. der. Name ist das eingegebene Stichwort. Das Suchen der Datei erfolgt
  724. analog zum Suchen einer Programmdatei mit den Variablen PATH und
  725. SEXT/XEXT.
  726. Beispiel: MANPATH=$HOME/doc, MANEXT=.doc, Eingabe: lharc. Dann
  727. sucht die Shell nach einer Datei namens $HOME/doc/lharc.doc.
  728. Die Datei wird, falls gefunden, mit den eingebauten Kommando pg ange-
  729. zeigt.
  730.  
  731. Um möglichst schnellen Zugriff auf die Hilfsdatei zu ermöglichen, erstellt
  732. die Shell nach dem Laden einen Index, in dem die einzelnen, in der Da-
  733. tei enthaltenen Kommandos verzeichnet sind. Dieser Index wird nach der
  734. Erstellung in eine Datei abgespeichert, die denselben Pfad und Dateina-
  735. men wie die Hilfsdatei, aber den Extender .idx hat (z.B. commands.idx).
  736. Beim nächsten Laden der Hilfsdatei wird der Index aus dieser Datei ge-
  737. laden, was besonders bei Festplatten eine enorme Beschleunigung gegen-
  738. über dem Neuerstellen des Index im Speicher darstellt.
  739. Wenn die Hilfsdatei neuer ist als die Indexdatei, wird ebenfalls ein neuer
  740. Index erstellt und abgespeichert. Dadurch wird erreicht, daß die Indexda-
  741. tei immer zu der Hilfsdatei paßt, auch wenn letztere verändert wird.
  742. Wenn man eine neue Indexdatei erstellen will, genügt es, die alte Index-
  743. datei zu löschen.
  744. Die Verwendung einer Indexdatei kann mit dem Shell-Flag -H unterbunden
  745. werden. Dies ist wichtig für Diskettenbenutzer, bei denen das Laden der
  746. Indexdatei länger dauert als die Neuerstellung des Index im Speicher.
  747. Siehe hierzu commands.doc zum Thema `set'.
  748.  
  749. Anstelle von commands.doc kann auch jede andere Datei als Hilfsdatei
  750. benutzt werden. Damit ein Kommando in der Datei erkannt wird, muß die
  751. Datei folgende Regeln erfüllen:
  752.  
  753. 1) Vor dem Text, der das Kommando erklärt bzw. der zu dem Kommando
  754. ausgegeben werden soll, muß eine Zeile stehen, die mit fünf Minuszeichen
  755. beginnt.
  756. 2) Direkt nach dieser Zeile muß eine Zeile stehen, die mit dem Komman-
  757. do beginnt. Das Kommando geht vom Anfang der Zeile bis (exkl.) zum
  758. ersten Nicht-Buchstaben (Buchstaben sind a-z und A-Z, keine Umlaute,
  759. kein ß) und darf maximal 10 Zeichen lang sein. Danach können weitere
  760. Informationen stehen, die nicht beachtet werden.
  761. 3) Der auszugebene Text beginnt mit der unter 2) beschriebenen Zeile
  762. und geht bis zur nächsten Zeile, die mit fünf Minuszeichen beginnt
  763. (exkl.).
  764.  
  765.  
  766. Beispiel:
  767.  
  768. -----                                      1)
  769. ls - Anzeigen von Directories                     2)
  770.                                           3)
  771.  
  772. (Weitere Angaben)                              4)
  773.                                           5)
  774. -----                                      6)
  775.  
  776. Bei der Eingabe von "ls <HELP>" werden die Zeilen 2) bis 5) ausgege-
  777. ben.
  778.  
  779. Natürlich kann man auch eine Kopie von commands.doc anfertigen und
  780. dort einige weitere beliebige Informationen eintragen, die unter entspre-
  781. chenden Stichworten abgefragt werden können.
  782.  
  783. Die Ausgabe erfolgt wie mit dem Kommando "pg". Siehe hierzu
  784. commands.doc.
  785.  
  786.  
  787. TECHNISCHER HINWEIS: (nur für Programmierer von Interesse)
  788.  
  789. Wenn die Hilfsdatei im Speicher steht und von der Shell aus ein anderes
  790. Programm gestartet wird, übergibt die Shell diesem in der Environment-
  791. Variablen _HELP_ADR die Adresse eines Pointers auf die geladene Hilfs-
  792. datei. Auf diese Weise kann eine Subshell auf die bereits geladene Datei
  793. zugreifen, ohne diese selber laden zu müssen (was einen nicht unerhebli-
  794. chen Aufwand an Speicherplatz bedeuten würde.)
  795. Die Shell liest den Inhalt von _HELP_ADR direkt nach der Initialisierung
  796. der Variablen aus dem Environment und löscht danach die Shellvariable
  797. _HELP_ADR. Beim Aufruf weiterer Programme wird diese Variable nur
  798. während der Erstellung des Environments für das neue Programm ange-
  799. legt. Die Variable _HELP_ADR ist also für den Anwender der Shell nie-
  800. mals sichtbar, befindet sich aber im Environment aller gestarteten Pro-
  801. gramme.
  802. Für die Übergabe ist es notwendig, daß noch mindestens ein Platz in der
  803. Variablentabelle frei ist.
  804. Das Format von _HELP_ADR ist
  805.     0xAAAAA:0xBBBBB
  806. , wobei AAAAA die Adresse eines Pointers ist (hexadezimal). Dieser Poin-
  807. ter zeigt auf den Text der geladenen Datei. 0xBBBBB ist die Adresse ei-
  808. ner internen Indextabelle, die die Shell zum schnellen Zugriff auf die ge-
  809. ladenen Daten benutzt. Diese Indextabelle ist ein Array von Strukturen
  810. des Typs
  811.  
  812.     struct
  813.     {
  814.       char Name[12];
  815.       long Offset;
  816.     } HelpIdxTyp;
  817.  
  818. Name ist der Name eines Kommandos und Offset ist die Byte-Entfernung
  819. der Erklärung dieses Kommandos von dem Beginn des Textes (der durch
  820. den Zeiger in der Adresse 0xAAAAA angegeben wird). Das Ende dieser
  821. Tabelle ist durch einen Eintrag mit Offset=-1L markiert.
  822. Die angelegte Indexdatei stellt ebendiesen Array dar.
  823. (0xAAAAA ist also vom Typ (char **), während 0xBBBBB vom Typ
  824. (HelpIdxTyp*) ist.)
  825. ACHTUNG: auf keinen Fall darf der Pointer verändert werden.
  826.  
  827.  
  828. b) Von der Standardeingabe
  829.  
  830.  
  831. Wenn das Flag L nicht gesetzt ist, ist der Zeileneditor ausgeschaltet, und
  832. die Shell liest Kommandos von der Standardeingabe. Das bedeutet, daß
  833. weder die Editierfunktionen noch die sonstigen Funktionen des Zeilenedi-
  834. tors, wie Filename Completion, Fileselect-Box, Help-Taste usw. zur Verfü-
  835. gung stehen. Der Sinn dieses Modus ist, Kommandos von etwas anderem
  836. als der Tastatur, z.B. von einer Schnittstelle, einer Datei oder einer Pipe,
  837. einzulesen.
  838. Um den Zeileneditor schon beim Start der Shell auszuschalten, muß beim
  839. Start von sh.ttp das Flag -L angegeben werden. Innerhalb der Shell kann
  840. dieselbe Wirkung durch Eingabe von "set -L" erreicht werden. Mit
  841. "set +L" wird der Zeileneditor wieder eingeschaltet.
  842. Wenn der Zeileneditor abgeschaltet ist, kann die Shell nur durch Eingabe
  843. von "exit" oder durch Druck auf Ctrl-Z beendet werden.
  844.  
  845.  
  846. c) Aus einer Datei
  847.  
  848. Es ist möglich, Dateien zu schreiben, die Shell-Kommandos enthalten und
  849. diese Dateien Kommando für Kommando von der Shell ausführen zu las-
  850. sen. Solche Dateien werden als Shell-Scripts (oder in der MS-DOS-Welt
  851. als Batch-Dateien) bezeichnet. Ein Shell-Script kann wiederum weitere
  852. Scripts ausführen usw., wobei die Tiefe der Schachtelung durch den zur
  853. Verfügung stehenden Speicher und die systembedingte Maximalanzahl of-
  854. fener Dateien begrenzt ist. Rekursive Shellscripts sind natürlich auch
  855. möglich.
  856. Für die Kommandos in Shell-Scripts gelten dieselben Regeln wie für
  857. Kommandos, die über die Tastatur eingegeben werden. Leider ist die
  858. Ausführung von Shell-Scripts derjenige Punkt, an dem die Okami-Shell und
  859. die normalen Unix-Shells am weitesten auseinanderklaffen, da beim Aufruf
  860. eines Shell-Scripts unter Unix dieses i.d.R. nicht von der Shell selber
  861. ausgeführt wird, sondern die Shell startet sich selber nochmals, um das
  862. Script auszuführen (Subshell). Auf dem ST ist diese Vorgehensweise we-
  863. gen des begrenzten Speichers nicht zu empfehlen, weswegen jedes Shell-
  864. script von der Shell selber ausgeführt wird. Dies hat Konsequenzen z.B.
  865. bei der Ein/Ausgabeumleitung von Shell-Scripts und den einem Script
  866. übergebenen Parametern. Außerdem kann jedes Script auf alle Shellvari-
  867. ablen der aufrufenden Shell zugreifen und diese verändern.
  868.  
  869. Bei der Ausführung eines Shellscripts wird das Script erst vollständig in
  870. den Speicher geladen und dann im Speicher ausgeführt. Das liefert be-
  871. sonders bei der Ausführung von Diskette enorme Geschwindigkeitsvorteile.
  872. Genügend Speicher ist normalerweise immer vorhanden, wenn man be-
  873. denkt, daß Scripts i.d.R. kleine Dateien (<5 KB) sind.
  874.  
  875. Bei Shellscripts gibt es die Möglichkeit, Programmierstrukturen wie if und
  876. while zu benutzen, die bei Tastatureingabe wenig Sinn machen. Damit ist
  877. es in der Tat möglich, Shellscripts zu schreiben, die wie ein Programm
  878. einer höheren Programmiersprache laufen. Siehe hierzu showpic.sh und
  879. commands.doc.
  880.  
  881.  
  882.  
  883.  
  884. Es gibt vier Arten von Kommandos:
  885.     1) interne Kommandos,
  886.     2) externe Kommandos,
  887.     3) Shellfunktionen,
  888.     4) Kommentare.
  889.  
  890.  
  891. INTERNE KOMMANDOS
  892.  
  893. Ein internes Kommando ist ein Kommando, durch das eine Funktion in-
  894. nerhalb der Shell ausgeführt wird, das also in der Shell eingebaut ist. In-
  895. terne Kommandos werden durch Eingabe ihres Namens aufgerufen.
  896. Genaue Erklärungen aller interner Kommandos befinden sich in der Datei
  897. commands.doc.
  898.  
  899. EXTERNE KOMMANDOS
  900.  
  901. Ein externes Kommando ist nicht in der Shell eingebaut, sondern in einer
  902. Datei auf einer Diskette, Ramdisk oder Festplatte vorhanden. Hierbei kann
  903. es sich sowohl um eine ausführbare Datei (.PRG, .TOS etc.) als auch um
  904. ein Shellscript handeln.
  905. Externe Kommandos können durch Eingabe des vollständigen Pfadnamens
  906. der entsprechenden Datei, aber auch durch Eingabe des Kommandona-
  907. mens (des Dateinamens ohne Pfad und Extender) gestartet werden. Die
  908. zugehörige Datei wird auf den Pfaden gesucht, die in der Shell-Variablen
  909. PATH gespeichert sind.
  910. Mit dem hash-Kommando kann der Pfad eines Kommandos der Shell mit-
  911. geteilt werden, ohne daß er in $PATH enthalten ist.
  912. Externe Kommandos können nur ausgeführt werden, wenn ihr Datei-Ex-
  913. tender einem der in den Shell-Variablen XEXT und SEXT gespeicherten
  914. entspricht. (Es kann jedoch jede Datei, unabhängig vom Dateinamen, ex-
  915. plizit als Shellscript oder Binärdatei ausgeführt werden, und zwar mit den
  916. Kommandos `.' und `exec'.)
  917. Siehe hierzu auch den Abschnitt über externe Kommandos in
  918. commands.doc.
  919.  
  920. Externen Programmen werden die Parameter nach dem xArg-Verfahren
  921. übergeben, wenn das Shell-Flag `a' gesetzt ist (siehe commands.doc zum
  922. Thema `set'). Dies ermöglicht die Übergabe von beliebig vielen Parame-
  923. tern, während Gemdos die Parameter auf 125 Zeichen beschränkt.
  924. Achtung: einige (wenige) Programme vertragen sich damit nicht und laufen
  925. nur, wenn die xArg-Übergabe mit `set -a' unterbunden wird. Dazu gehört
  926. z.B. der Entpacker `unzip'.
  927.  
  928.  
  929. SHELLFUNKTIONEN
  930.  
  931. Shellfunktionen sind Shellscripts, die resident im Speicher gehalten wer-
  932. den. Sie haben dieselben Eigenschaften wie Shellscripts und können des-
  933. halb auch genauso programmiert werden. Alles, was über die Verwendung
  934. von Shellscripts gesagt wird, gilt auch für Shellfunktionen.
  935. Jede Shellfunktion hat einen Namen, der bis zu 80 Zeichen lang sein
  936. darf. Groß- und Kleinschreibung wird unterschieden, d.h. "hallo" und
  937. "Hallo" sind zwei verschiedene Shellfunktionen.
  938. Bei der Ausführung haben Funktionen die oberste Priorität, kommen also
  939. noch vor den internen Kommandos. Es ist also möglich, interne Komman-
  940. dos umzudefinieren, indem man eine Shellfunktion mit demselben Namen
  941. anlegt. Innerhalb dieser Funktion kann auf das ursprüngliche Kommando
  942. zugegriffen werden, indem man dem Kommando ein Ausrufezeichen (ohne
  943. Leerzeichen) vorstellt.
  944. Die Syntax einer Deklaration von Shellfunktionen ist:
  945.  
  946.  
  947. [Funktionsname] "(" Dateiname ")"        (1)
  948.  
  949.  
  950.     oder
  951.  
  952. Funktionsname "()"                 (2)
  953. "{"
  954.   {Zeilen des Funktionsrumpfes}
  955. "}"
  956.  
  957.     oder
  958.  
  959. Funktionsname "()"                 (3)
  960. "{}"
  961.  
  962. (1) In der ersten Fassung wird die angegebene Datei als Shellscript in
  963. den Speicher geladen und unter dem Namen der Funktion abgespeichert.
  964. Wenn kein Funktionsname angegeben ist, wird der Basisname des Datei-
  965. namens (ohne Extender) als Funktionsname benutzt. In dieser Fassung
  966. entspricht die Shellfunktion also einem speicherresidenten Shellscript.
  967. Wenn die angegebene Datei eine ausführbare Programmdatei ist, wenn al-
  968. so ihr erstes Wort 0x601a ist, wird das Programm geladen und eine
  969. Shellfunktion erzeugt, die das Programm mit exec -x startet. Auf diese
  970. Weise ist es möglich, auch Binärprogramme resident im Speicher zu hal-
  971. ten und ohne Disketten- oder Plattenzugriffe beliebig oft zu starten.
  972. ACHTUNG: Die Vorgehensweise dabei beruht auf der Fähigkeit der Gem-
  973. dos-Funktion Pexec, Binärprogramme zu laden und erst zu einem späte-
  974. ren Zeitpunkt unter Angabe der Basepage-Adresse zu starten. Die Doku-
  975. mentation von Atari zu diesem Feature ist kurz und eindeutig; sie lautet:
  976. "Finger davon". Nichtsdestoweniger funktioniert es, aber es besteht keine
  977. Garantie, daß es immer oder mit allen Programmen oder Betriebssystem-
  978. versionen funktioniert.
  979.  
  980. (2) In der zweiten Fassung wird die Funktion von der Tastatur oder dem
  981. Shellscript, in dem die Deklaration steht, gelesen. Wenn bereits eine
  982. Funktion mit dem angegebenen Namen existiert, wird sie umdefiniert.
  983. Wenn der Funktionsrumpf leer ist, wenn also die Zeilen mit { und } di-
  984. rekt aufeinander folgen, wird die Funktion gelöscht.
  985. In dieser Fassung wird die Eingabe verkürzt, d.h. Leerzeilen, Kommentar-
  986. zeilen und führende Leerzeichen werden nicht mit abgespeichert.
  987.  
  988. (3) In der dritten Fassung wird die Funktion gelöscht. Das geht auch mit
  989. dem Kommando `unset Funktionsname'.
  990.  
  991. Die zweite und dritte Fassung erwarten also mehr als eine Zeile. Die
  992. weiteren Zeilen der Deklaration werden von der sog. "Sekundäreingabe"
  993. erwartet, also von dem Gerät oder der Datei, von der augenblicklich
  994. Kommandos gelesen werden (das ist nicht immer die Standardeingabe).
  995. Wenn es sich dabei um die Tastatur handelt, erscheint als Prompt der In-
  996. halt der Shellvariablen PS2.
  997.  
  998. ACHTUNG: In keinem Fall darf zwischen Funktionsname und der geöffne-
  999. ten Klammer ein Leerzeichen stehen.
  1000.  
  1001.  
  1002. Beispiele:
  1003.  
  1004. hallo(hallo.sh)
  1005.  
  1006. initialisiert eine Funktion namens "hallo". Die Funktion entspricht
  1007. dem Shellscript hallo.sh.
  1008.  
  1009. hallo (hallo.sh)
  1010. ruft das Kommando hallo mit dem Parameter (hallo.sh) auf, ist also
  1011. KEINE Deklaration einer Shellfunktion. (Schuld daran ist das Leer-
  1012. zeichen nach "hallo".)
  1013.  
  1014. (c:/bin/test.sh)
  1015. initialisiert eine Funktion aus der Datei c:/bin/test.sh. Da kein
  1016. Funktionsname angegeben ist, wird der Basisname der Datei be-
  1017. nutzt, es wird also die Shellfunktion "test" erzeugt. (Nebenbei be-
  1018. merkt: dadurch wird das interne Kommando "test" umdefiniert.)
  1019.  
  1020. (c:/bin/hallo.prg)
  1021. lädt das Programm hallo.prg und erzeugt eine Shellfunktion namens
  1022. hallo, die das geladene Programm startet. hallo hat dabei folgenden
  1023. Funktionsrumpf:
  1024.     exec -lg c:/bin/hallo.prg 0xnnnn
  1025. wobei nnnn die beim Laden ermittelte Adresse der Basepage von
  1026. hallo.prg ist (hexadezimal).
  1027.  
  1028. hallo()
  1029. {
  1030.   echo Hallo, wie gehts?
  1031.   read _
  1032.   echo Es freut mich, daß es Dir $_ geht.
  1033.   unset _
  1034. }
  1035. definiert die Funktion hallo mit dem angegebenen Funktionsrumpf.
  1036. Die Verwendung von Shellvariablen ist möglich; in diesem Fall wird
  1037. die Variable _ (Underscore) benutzt, die für temporäre Verwendun-
  1038. gen zur Verfügung steht. Diese Deklaration kann sowohl in einem
  1039. Shellscript stehen als auch über die Tastatur eingegeben werden.
  1040. Bei Tastatureingabe erscheint das Prompt $PS2.
  1041.  
  1042. ls()
  1043. {
  1044.   !ls -C $*
  1045. }
  1046. Das interne Kommando ls wird so umdefiniert, daß die Option -C
  1047. immer aktiv ist. Dies geschieht durch Definition einer Shellfunktion
  1048. mit Namen ls, die das interne Kommando durch !ls aufruft.
  1049.  
  1050. alias ls !ls -C
  1051. hat dieselbe Wirkung.
  1052.  
  1053. hallo()
  1054. {}
  1055. Die Shellfunktion hallo wird gelöscht.
  1056.  
  1057. hallo()
  1058. {
  1059. }
  1060. Dito.
  1061.  
  1062. unset hallo
  1063. Dito.
  1064.  
  1065.  
  1066. ()
  1067. (weder Funktions- noch Dateiname angegeben) ist ein Syntaxfehler.
  1068.  
  1069.  
  1070. Mit dem internen Kommando "fcts" kann eine Liste sämtlicher Shellfunk-
  1071. tionen erzeugt werden. Die Definition einer beliebigen Shellfunktion kann
  1072. mit dem Kommando "type" ausgegeben werden. Siehe hierzu
  1073. commands.doc.
  1074.  
  1075.  
  1076. Es gehört zur Philosophie von Unix, daß man an der reinen Eingabe nicht
  1077. erkennen kann, ob es sich bei dem eingegebenen Kommando um ein in-
  1078. ternes Kommando, eine ausführbare Datei, ein Shellscript oder eine Shell-
  1079. funktion handelt. Um das herauszufinden, gibt es das interne Kommando
  1080. `type'. Siehe hierzu commands.doc.
  1081.  
  1082.  
  1083. KOMMENTARE
  1084.  
  1085. Eine Eingabe gilt als Kommentar, wenn sie mit einem Doppelkreuz (#)
  1086. beginnt oder wenn sie nur aus einer leeren Zeile besteht. Kommentare
  1087. werden von der Shell nicht weiter beachtet und sind nützlich zum Doku-
  1088. mentieren von Shellscripts. Die Tastatureingabe von Kommentaren ist
  1089. zwar möglich, aber nicht unbedingt sinnvoll.
  1090.  
  1091.  
  1092.  
  1093. ---------------------------------------------------------------------
  1094. ERWEITERTE WILDCARDS
  1095.  
  1096. Die Okami-Shell erlaubt für die Angabe von Dateinamen ein Wildcard-
  1097. System, das weit über das von Gemdos gestellte hinausgeht. Die einzigen
  1098. Gemdos-Wildcards sind * und ?, wobei ein ein Dateiname nur einen Stern
  1099. enthalten darf, und den nur am Ende von Name oder Extender. Bei "**"
  1100. gibt es Probleme, "*hallo*" liefert nicht alle Dateinamen, die "hallo" ent-
  1101. halten usw.
  1102. Die erweiterten Wildcards der Okami-Shell orientieren sich an denen, die
  1103. von der Original-Unix-Shell zur Verfügung gestellt werden. Es bedeuten:
  1104.  
  1105. *        beliebig viele, auch null, beliebige Zeichen.
  1106. ?        genau ein beliebiges Zeichen.
  1107. [abcd]    genau ein Zeichen, und zwar eins der in den Klammern ste-
  1108. henden. Es    dürfen beliebig viele Zeichen angeführt sein.
  1109. [a-g]    genau ein Zeichen, und zwar a, b, ... oder g. Das Minuszei-
  1110. chen bedeutet also "bis".
  1111. [~abc]    genau ein Zeichen, und zwar ein beliebiges bis auf die Zei-
  1112. chen in den eckigen Klammern. Es dürfen beliebig viele Zei-
  1113. chen angeführt sein.
  1114.  
  1115. Der Punkt zwischen Dateiname und Extender wird dabei wie jedes andere
  1116. Zeichen behandelt, "*" paßt also auf alle Dateinamen und nicht nur auf
  1117. die ohne Extender.
  1118.  
  1119. Beispiele:
  1120.  
  1121. *        alle Dateinamen.
  1122. *.*        alle Dateinamen, die einen Extender haben.
  1123. *.?        alle Dateinamen, deren Extender aus genau einem Zei-
  1124. chen besteht.
  1125. *.[co]    alle Dateinamen mit Extender .c oder .o.
  1126. *.[~co]    alle Dateinamen außer denen mit Extender .c und .o.
  1127. [abcd]*[xyz]    alle Dateinamen, deren erstes Zeichen a, b, c oder
  1128. d und deren    letztes Zeichen x, y oder z ist. Der
  1129. Punkt, der den Extender einleitet (falls vorhanden), kann
  1130. irgendwo dazwischen stehen.
  1131. a[0-9]    alle Dateinamen, die aus a, gefolgt von einer Ziffer be-
  1132. stehen, also a0, a1, ..., a9.
  1133. ??[a-z][0-9]    alle Dateinamen, die aus zwei beliebigen Zeichen,
  1134. gefolgt von einem Buchstaben und einer Ziffer bestehen.
  1135.  
  1136.  
  1137. Wenn das Shell-Flag w nicht gesetzt ist, sind die erweiterten Wildcards
  1138. außer Kraft gesetzt. Die Shell benutzt dann nur die Wildcards, die von
  1139. TOS zur Verfügung gestellt werden.
  1140. Das Programm für den Vergleich mit erweiterten Wildcards stammt von
  1141. Rich Salz und wurde 1986 geschrieben.
  1142.  
  1143.  
  1144.  
  1145. ---------------------------------------------------------------------------
  1146. FLAGS UND PARAMETER
  1147.  
  1148. Jedem Kommando können Flags und Parameter übergeben werden. I.d.R.
  1149. werden Parameter benutzt, um festzulegen, womit etwas getan werden
  1150. soll, und die Flags legen fest, wie es getan werden soll.
  1151.  
  1152. Die Shell teilt die Eingabezeile in Worte auf. Worte werden durch White-
  1153. space-Zeichen (Leerzeichen, Tab, Formfeed) getrennt. Durch doppelte (")
  1154. oder einfache (') Anführungszeichen können auch Whitespace-Zeichen in
  1155. Worten benutzt werden, z.B. ist
  1156.     a b c d
  1157. vier Worte, während
  1158.     "a b c d"
  1159. nur ein Wort ist. Einfache Anführungszeichen verhindern außerdem jede
  1160. Art von Interpretation, d.h. innerhalb von einfachen Anführungszeichen
  1161. werden
  1162.     * keine Shellvariablen expandiert
  1163.     * keine Slashes zu Backslash umgeformt
  1164.     * keine Escape-Sequenzen (beginnent mit ^) interpretiert
  1165.     * keine Command-Substitution ausgeführt
  1166. . Es ergibt also
  1167.     $HOME
  1168. den Inhalt der Shell-Variablen HOME und
  1169.     '$HOME'
  1170. den String $HOME.
  1171.  
  1172. Externen Kommandos werden alle übergebenen Flags und Parameter als
  1173. Kommandozeile übergeben. Alle exportierten Shell-Variablen werden den
  1174. externen Kommandos im Environment übergeben. Das Betriebssystem limi-
  1175. tiert die Länge der Kommandozeile auf maximal 125 Zeichen. Die Über-
  1176. gabe von mehr Zeichen ist durch das xArg-Protokoll möglich.
  1177. Den internen Kommandos können beliebig viele Flags und Parameter
  1178. übergeben werden, allerdings ist für die meisten Kommandos nur eine be-
  1179. schränkte Anzahl von Parametern sinnvoll.
  1180. Die Flags der internen Kommandos werden durch ein Minus- oder Plus-
  1181. zeichen eingeleitet. Näheres siehe commands.doc.
  1182.  
  1183. Die Shell benutzt eine Reihe eigener Flags, die mit dem internen Kom-
  1184. mando set eingestellt werden können. Siehe hierzu commands.doc.
  1185.  
  1186. ----------------------------------------------------------------------------
  1187. VERKETTETE KOMMANDOS
  1188.  
  1189. Kommandos können in einer Zeile durch Semikolon getrennt angeführt
  1190. werden. Die Kommandos werden von links nach rechts ausgeführt.
  1191.  
  1192.  
  1193. Wenn eine eingegebene Zeile mit einem Dach (^) endet, wird anstelle des
  1194. Daches die Fortsetzung der Zeile von der Sekundäreingabe eingelesen.
  1195. Das entspricht dem Backslash in Unix. (In TOS ist der Backslash zum
  1196. Trennen von Datei- und Ordnernamen reserviert.)
  1197. Beispiel:
  1198. ec^
  1199. ho ha^
  1200. l^
  1201. lo
  1202.  
  1203. entspricht "echo hallo". Dabei kann diese Eingabe sowohl von der Tasta-
  1204. tur als auch aus einem Shellscript oder einer Shellfunktion stammen.
  1205.  
  1206.  
  1207.  
  1208. ----------------------------------------------------------------------------
  1209. SHELLVARIABLEN
  1210.  
  1211. Eine besondere Art von internem Kommando ist die Zuweisung eines
  1212. Wertes an eine Shellvariable. Alle Shellvariablen sind Stringvariablen. Der
  1213. Name einer Shellvariablen kann in beliebiger Reihenfolge Buchstaben, Zif-
  1214. fern und Underscores (_) enthalten.
  1215.  
  1216. Beschränkungen:
  1217.     Maximalanzahl der Shellvariablen: 200
  1218.     Maximallänge des Variablennamens und -Wertes:
  1219.                      unbeschränkt (80 relevante Stellen)
  1220.  
  1221. Wer damit nicht auskommt, benutze den Software-Support, um eine Versi-
  1222. on der Shell mit größeren Kapazitäten zu erhalten. Die Maximalanzahl
  1223. der Variablen einer Shell kann mit "ver -l" ermittelt werden.
  1224.  
  1225. Jede Shell-Variable hat einen Status, der aus beliebigen (auch null) der
  1226. folgenden Eigenschaften besteht:
  1227.  
  1228. USR (User): Die Variable wurde vom Benutzer angelegt oder verändert.
  1229. SYS (System): Es handelt sich um eine Systemvariable, die von der Shell
  1230. verwaltet wird. Hierzu gehören z.B. die Positionsparameter $0,
  1231. $1..., $#, $? usw.
  1232. R/O (Read-Only): Der Wert der Variablen darf nicht verändert und die
  1233. Variable darf nicht gelöscht werden.
  1234. EXP (Export): Die Variable befindet sich im Environment.
  1235.  
  1236. Die Eigenschaften USR und SYS können nicht beeinflußt werden. Die Ei-
  1237. genschaften R/O und EXP können mit den Kommandos `readonly' und
  1238. `export' gesetzt und gelöscht werden. Siehe hierzu commands.doc.
  1239.  
  1240.  
  1241. DEKLARATION
  1242.  
  1243. Shell-Variablen brauchen nicht deklariert zu werden.
  1244.  
  1245.  
  1246. ZUWEISUNG
  1247.  
  1248. Die Zuweisung eines Wertes an eine Shell-Variable geschieht durch eine
  1249. Eingabe der Form
  1250.     Variable=Wert
  1251.  
  1252. z.B.:
  1253.     NAME=Okami-Shell
  1254.  
  1255. Es wird der String "Okami-Shell" der Shellvariablen NAME zugewiesen. In
  1256. Unix ist es üblich, Shell-Variablen in Großbuchstaben zu schreiben, es
  1257. sind allerdings auch Kleinbuchstaben möglich. NAME und Name sind zwei
  1258. unterschiedliche Variablen.
  1259. Auf die folgende Weise kann einer Variablen ein leerer Wert zugewiesen
  1260. werden:
  1261.     Variable=""
  1262. Der Wert der Variablen wird also gelöscht, aber die Variable selber
  1263. bleibt bestehen.
  1264.  
  1265.  
  1266. Außerdem können die internes Kommandos "read", "fsel", "alert" und
  1267. "mouse" zur Zuweisung von Eingaben an Shellvariablen benutzt werden.
  1268. Siehe hierzu commands.doc.
  1269.  
  1270.  
  1271. BENUTZUNG
  1272.  
  1273. Der Wert einer Shell-Variablen kann durch Angabe des Variablennamens
  1274. mit vorgestelltem Dollar-Zeichen angegeben werden. In einer Eingabezeile
  1275. der Shell werden erst alle Variablen zu den betreffenden Werten expan-
  1276. diert, bevor die Zeile ausgeführt wird. Shell-Variablen, an die noch kein
  1277. Wert zugewiesen wurde, werden als Leerstrings behandelt.
  1278.  
  1279. Beispiele:
  1280.  
  1281.     NAME=Okami-Shell
  1282.     echo $NAME
  1283.  
  1284. erzeugt die Ausgabe "Okami-Shell".
  1285.  
  1286.     NAME=Okami-Shell
  1287.     echo Der Name ist $NAME und nicht anders. 
  1288.  
  1289. erzeugt die Ausgabe "Der Name ist Okami-Shell und nicht anders."
  1290.  
  1291.     VAR1=$VAR2
  1292.  
  1293. weist der Variablen VAR1 den Wert der Variablen VAR2 zu.
  1294.  
  1295.     VAR1=VAR2
  1296.     VAR3=VAR1
  1297.     $VAR1=$VAR3
  1298.  
  1299. weist der Variablen VAR2 den String VAR1 zu (ja, wirklich.)
  1300.  
  1301.  
  1302. Es ist auch möglich, Shell-Kommandos an Variablen zuzuweisen und dann
  1303. ausführen zu lassen:
  1304.  
  1305.     CC=c:\compiler\cc.ttp
  1306.     $CC test.c
  1307.  
  1308. ruft das Programm c:\compiler\cc.ttp mit dem Parameter test.c auf.
  1309.  
  1310.  
  1311. LÖSCHEN
  1312.  
  1313. Auf die folgende Weise werden Variablen gelöscht:
  1314.     Variable=
  1315. Dies ist nicht zu verwechseln mit dem Löschen des Inhalts einer Varia-
  1316. blen (siehe oben). Wenn hinter dem Gleichheitszeichen nichts steht, wird
  1317. die Variable vollständig gelöscht und belegt danach keinen Platz mehr in
  1318. der Variablentabelle.
  1319. Dies ist notwendig, da die Shell nur über eine begrenzte Anzahl von Va-
  1320. riablen verfügt. Besonders Shell-Scripts, die Variablen für lokale Zwecke
  1321. benutzen, sollten diese Variablen nach der Benutzung wieder freigeben.
  1322.  
  1323. Shellvariablen können außerdem mit dem Kommando unset gelöscht wer-
  1324. den.
  1325. Beim Löschen verliert die Variable natürlich auch ihren Status. Um den
  1326. Status zu erhalten, darf nur der Wert der Variablen gelöscht werden
  1327. (NAME="").
  1328.  
  1329.  
  1330. Beispiele:
  1331.  
  1332.     NAME=
  1333. Die Shell-Variable NAME wird gelöscht.
  1334.  
  1335.     unset NAME
  1336. Ebenso.
  1337.  
  1338.  
  1339.     SAVECWD=$CWD
  1340.     cd c:\work\test
  1341.     .......................(weitere Kommandos)
  1342.     cd $SAVECWD
  1343.  
  1344. Das aktuelle Verzeichnis (das stets in der Variablen CWD steht) wird in
  1345. der Variablen SAVECWD gesichert. Danach wird das aktuelle Verzeichnis
  1346. geändert (mit dem internen Kommando "cd"), und es werden weitere
  1347. Kommandos ausgeführt. Anschließend wird das aktuelle Verzeichnis wieder
  1348. restauriert.
  1349. Diese Technik sollte von allen Shellscripts benutzt werden, die das aktu-
  1350. elle Verzeichnis ändern. Unter Unix werden Shellscripts stets von Sub-
  1351. shells ausgeführt, und das aktuelle Verzeichnis ist eine Eigenschaft eines
  1352. Prozesses, weswegen Shellscripts das aktuelle Verzeichnis ändern können,
  1353. ohne das aktuelle Verzeichnis der aufrufenden Shell zu beeinflussen. Die
  1354. Okami-Shell benutzt keine Subshells, und daher kann jedes Shell script
  1355. das aktuelle Verzeichnis der Shell ändern, was in der praktischen Anwen-
  1356. dung nicht immer erwünscht ist.
  1357. Das umständliche Speichern und Restaurieren des aktuellen Verzeichnis-
  1358. ses entfällt, wenn die Shell-Flags x und c gesetzt sind. Siehe hierzu das
  1359. interne Kommando `set' in commands.doc.
  1360.  
  1361.  
  1362. Es ist möglich, eine Shellvariable zu benutzen, deren Name nur aus ei-
  1363. nem Underscore (_) besteht. Die Verwendung einer solchen Variablen für
  1364. kurzzeitige lokale Verwendungen ist z.B. in der Programmiersprache Pro-
  1365. log üblich.  
  1366.  
  1367.  
  1368.  
  1369. SYSTEMVARIABLEN
  1370.  
  1371. Eine Reihe von Shellvariablen werden von der Shell selber angelegt und
  1372. benutzt. Es ist teilweise möglich, die Werte dieser Variablen zu verän-
  1373. dern. Die Systemvariablen sind:
  1374.  
  1375. OKSH_PROFILE
  1376. Das beim Start der Shell zu landende Profile. Muß folglich bereits
  1377. beim Start der Shell im Environment vorhanden sein und hat von da
  1378. an keine Bedeutung für die Shell mehr.
  1379. PS1
  1380. Das Eingabeprompt. Kann vom Anwender verändert werden (was
  1381. normalerweise im Profile geschieht). Der Defaultwert ist " $ ".
  1382. PS2
  1383.  
  1384. Das sekundäre Eingabeprompt. Erscheint z.B. bei der Eingabe von
  1385. Shellfunktionen. Kann beliebig verändert werden, der Defaultwert ist
  1386. "> ".
  1387. OKAMISHELL
  1388. Die Versionsnummer der Shell. Kann nicht verändert werden.
  1389. Diese Variable wird nicht an gestartete Programme weitergegeben
  1390. und ist deshalb nur in Shellscripts gesetzt, wenn diese unter der
  1391. Okami-Shell laufen. Daher kann das Vorhandensein dieser Variablen
  1392. als Test benutzt werden, ob ein Shellscript unter der Okami- oder
  1393. einer anderen Shell ausgeführt wird.
  1394.  TERM
  1395. Der Rechnertyp, wird anhand des _MCH-Cookies eingestellt und ist
  1396. je nachdem "Atari ST", "Atari Mega ST", "Atari STE" oder "Atari
  1397. TT". Wenn kein Cookie-Jar installiert ist, wenn kein _MCH-Cookie
  1398. vorhanden ist oder wenn dessen Wert kleiner als 0 oder größer als
  1399. 3 ist, wird "Atari ST" benutzt. TERM ist in der jetzigen Version der
  1400. Shell noch ohne weitere Bedeutung, wird aber von einigen Program-
  1401. men benutzt, die eine Unix-ähnliche Termcap verwenden (z.B. Gnu-
  1402. Emacs) und sollte dann auf den entsprechenden, von der Termcap
  1403. benötigten Wert eingestellt werden.
  1404. CWD
  1405. Das aktuelle Verzeichnis. Wird nach jedem Wechsel des Verzeich-
  1406. nisses automatisch aktualisiert und sollte nicht von Hand verändert
  1407. werden. (Durch eine Zuweisung an diese Variable wird das aktuelle
  1408. Verzeichnis NICHT geändert.)
  1409. HOME
  1410. Das Verzeichnis, aus dem die Shell gestartet wurde (genauer gesagt
  1411. das aktuelle Verzeichnis zum Zeitpunkt des Starts der Shell). Kann
  1412. nach Bedarf verändert werden.
  1413. ETC
  1414. Das Verzeichnis, in dem die Shell Hilfsdateien wie z.B. die Textda-
  1415. tei für das help-Kommando erwartet. Wird bei Programmstart auf
  1416. denselben Wert wie HOME eingestellt und kann beliebig verändert
  1417. werden.
  1418. SHELL
  1419. Hier soll der vollständige Aufrufpfad des Shellprogramms eingetragen
  1420. sein. Da die Shell diesen nicht mit völliger Sicherheit selber bestim-
  1421. men kann, wird hier $HOME\sh.ttp eingetragen. Kann beliebig ange-
  1422. paßt werden, wenn diese Angabe einmal nicht zutrifft. Wird nicht
  1423. von der Shell, aber von einigen Programmen benutzt (z.B. Micro-
  1424. Emacs oder Pure C). Wer ein neues Programm schreibt, sollte die
  1425. Shell lieber über den _shell_p-Zeiger aufrufen.
  1426. PAGELEN
  1427. Die Anzahl der Zeilen auf dem Bildschirm. Wird von dem internen
  1428. Kommando pg (bzw. more) benutzt. Kann beliebig eingestellt wer-
  1429. den. Die Defaulteinstellung ist 23.
  1430. PIPDIR
  1431. Das Laufwerk und der Pfad, auf dem die Hilfsdateien von Pipelining,
  1432. Command Substitution usw. erzeugt werden. Muß auf einem be-
  1433. schreibbaren Laufwerk (am besten auf einer Ramdisk) liegen. Die
  1434. Defaulteinstellung ist $HOME. Kann beliebig verändert werden.
  1435. NULL
  1436. Der Name des Gerätes oder der Datei, an die die Ausgaben geleitet
  1437. werden, die zum Null-Gerät (NULL:) umgeleitet werden. Kann ver-
  1438. ändert werden. Die Defaulteinstellung ist "PRN:" (paralelle Schnitt-
  1439. stelle). Wer einen Drucker hat, sollte hier eine Datei z.B. auf der
  1440. Ramdisk eintragen. Die Einstellung AUX: für die serielle Schnittstel-
  1441. le ist nicht möglich, da diese Schnittstelle von der Standard-Fehler-
  1442. ausgabe belegt ist.
  1443. XEXT
  1444.  
  1445. Eine Liste von durch Kommata oder Semikolons getrennten Exten-
  1446. dern. Dateien mit einem der hier aufgeführten Extender können als
  1447. Binärprogramme gestartet werden. Die Defaulteinstellung ist    
  1448. ".prg,.tos,.ttp,.app". Die Punkte vor den Extendern müssen mit angege-
  1449. ben werden. Kann beliebig verändert werden.
  1450. SEXT    
  1451. Eine Liste von durch Kommata oder Semikolons getrennten Exten-
  1452. dern. Dateien mit einem der hier aufgeführten Extender können als
  1453. Shellscripts gestartet werden. Die Defaulteinstellung ist ".sh". Die
  1454. Punkte vor den Extendern müssen mit angegeben werden. Kann be-
  1455. liebig verändert werden.
  1456. GEXT
  1457. Eine Liste von durch Kommata oder Semikolons getrennten Exten-
  1458. dern. Binärdateien mit einem der hier aufgeführten Extender werden
  1459. als GEM-Programme, d.h. nicht direkt, sondern über die Shellfunkti-
  1460. on gemexec gestartet. Siehe hierzu den Abschnitt über gemexec in
  1461. commands.doc. Die Defaulteinstellung ist ".prg". Kann beliebig verän-
  1462. dert werden.
  1463. Wie in commands.doc erklärt, müssen die Extender nicht unbedingt
  1464. denen von ausführbaren Programmdateien entsprechen.
  1465. MANEXT
  1466. Eine Liste von durch Kommata oder Semikolons getrennten Exten-
  1467. dern. Dateien mit einem der hier angeführten Extender werden von
  1468. der Online-Hilfe mit der Helptaste oder dem Kommando man als
  1469. Anleitungsdateien erkannt. Die Voreinstellung lautet ".doc,.man". Kann
  1470. beliebig verändert werden.
  1471. PATH
  1472. Eine Liste von durch Kommata oder Semikolons getrennten Pfaden.
  1473. Bei der Eingabe eines externen Kommandos ohne vollständige Pfad-
  1474. angabe wird die Datei auf den hier angegebenen Pfaden gesucht.
  1475. Die Defaulteinstellung ist ".,..,$HOME,$HOME\bin". Kann beliebg ver-
  1476. ändert werden.
  1477. CDPATH
  1478. Eine Liste von durch Kommata oder Semikolons getrennten Pfaden.
  1479. Beim Wechsel des aktuellen Arbeitsverzeichnisses mit "cd" wird,
  1480. wenn der bei cd angegebene Pfad nicht existiert und nicht absolut
  1481. angegeben ist, auf den in CDPATH gespeicherten Pfaden gesucht.
  1482. Die Defaulteinstellung ist "..,\". Kann beliebig verändert werden.
  1483. MANPATH
  1484. Eine Liste von durch Kommata oder Semikolons getrennten Pfaden.
  1485. Auf diesen Pfaden sucht die Online-Hilfe (Helptaste oder das Kom-
  1486. mando man) nach Anleitungsdateien. Die Defaulteinstellung ist
  1487. "$HOME/doc". Kann beliebig verändert werden.
  1488. HELPFILE
  1489. Der Name der Datei, aus der die Erklärungen, die bei Druck auf
  1490. die Help-Taste ausgegeben werden, stehen. Die Default einstellung
  1491. ist "$HOME\doc\commands.doc". Kann beliebig verändert werden.
  1492. CLIPDIR
  1493. Enthält den Pfad des GEM-Clipboards. Wird durch die Kommandos
  1494. gon und clipb initalisiert, die Voreinstellung bei Programmstart lautet
  1495. "X:\scrapdir\scrap.*", wobei X: das Bootlaufwerk ist. Diese Shellvari-
  1496. able sollte nur mit dem Kommando clipb verändert werden. Siehe
  1497. hierzu auch commands.doc.
  1498. 0
  1499. Enthält bei Eingabe eines Kommandos den Namen des Kommandos
  1500. und beim automatischen Aufruf der Funktion gemexec den vollstän-
  1501. digen Pfad des aufzurufenden Programms.
  1502. 1
  1503.  
  1504. Enthält den ersten Parameter der Eingabezeile.
  1505. 2
  1506. Enthält den zweiten Parameter der Eingabezeile usw.
  1507. #
  1508. Enthält die Anzahl der Parameter der Eingabezeile.
  1509. *
  1510. Enthält die vollständige Eingabezeile.
  1511. ?
  1512. Enthält den Rückgabewert des zuletzt ausgeführten Kommandos.
  1513.  
  1514. Die folgenden Shellvariablen werden nur von einzelnen internen Komman-
  1515. dos benutzt.
  1516.  
  1517. COLUMNS
  1518. von `scr': Anzahl der Zeilen auf dem Bildschirm.
  1519. DIALPREFIX
  1520. für `dial': Präfix des Modem-Wählkommandos.
  1521.  
  1522.  
  1523. Nach dem Start der Shell werden Variablendefinitionen aus dem Environ-
  1524. ment gelesen und ausgeführt. Auf diese Weise können alle Variablen
  1525. (auch LOGNAME usw.) geändert, aber keine gelöscht werden.
  1526.  
  1527.  
  1528. ----------------------------------------------------------------------------
  1529. EIN/AUSGABE-UMLEITUNG
  1530.  
  1531. 1) Für interne Kommandos
  1532.  
  1533. Die Eingabe, Ausgabe und Fehlerausgabe jedes internen Kommandos kann
  1534. auf einfache Weise in bzw. aus einer beliebigen Datei oder zu bzw. von
  1535. einem Gerät umgeleitet werden.
  1536.  
  1537. Folgende Umleitungsmöglichkeiten stehen zur Verfügung:
  1538.  
  1539. < Datei         Umleitung der Eingabe
  1540. > Datei         Umleitung der Ausgabe, die Datei wird vorher gelöscht
  1541. >> Datei        Anhängen der Ausgabe an die Datei
  1542. 2> Datei        Umleitung der Fehlerausgabe, die Datei wird vorher
  1543.             gelöscht
  1544. 2>> Datei        Anhängen der Fehlerausgabe an die Datei
  1545.  
  1546.  
  1547. Anstelle von "Datei" können auch die folgenden Geräte angegeben sein:
  1548.  
  1549.     CON:        Konsole (Default)
  1550.     PRN:        parallele Schnittstelle (Drucker)
  1551.     AUX:        serielle RS232-Schnittstelle (Modem)
  1552.     NULL:    ignorieren
  1553.  
  1554. Das Gerät NULL:, auch Null-Gerät genannt (in Unix: /dev/null), wird
  1555. nicht vom Betriebssystem des ST unterstützt, sondern von der Shell simu-
  1556. liert. Der Zweck eines Null-Gerätes ist, die Ausgabe oder Fehlerausgabe
  1557. eines Kommandos zu unterdrücken. Die Shell-Variable NULL gibt an, wo
  1558. die Ausgabe, die an NULL: umgeleitet wird, tatsächlich landen soll. Nor-
  1559. malerweise ist das die Druckerschnittstelle; wenn diese von einem Druk-
  1560. ker belegt ist, sollte man eine reguläre Datei z.B. auf der Ramdisk ange-
  1561. ben (NULL=G:/null).
  1562.  
  1563. Beispiel:
  1564.     rm *.dup
  1565. löscht sämtliche dup-Dateien, gibt aber eine Fehlermeldung aus, wenn
  1566. keine solchen Dateien vorhanden sind oder wenn sie schreibgeschützt
  1567. sind. Um die Fehlermeldung zu unterdrücken, kann man stattdessen
  1568. schreiben:
  1569.     rm *.dup 2>NULL:
  1570. Dadurch werden die Fehlermeldungen an das Null-Gerät geleitet.
  1571. (Nebenbei: bei Verwendung von
  1572.     rm -f *.dup
  1573. werden auch keine Fehlermeldungen ausgegeben, allerdings werden damit
  1574. auch schreibgeschützte Dateien gelöscht.)
  1575.  
  1576.  
  1577. Wenn keine Umleitung angegeben ist, geht die Eingabe von der Tastatur
  1578. und die Ausgabe und Fehlerausgabe zum Bildschirm, genauer gesagt zu
  1579. der Standard-Ein- und -Ausgabe der Shell selber (die beim Start von
  1580. sh.ttp angegeben werden kann).
  1581.  
  1582.  
  1583. PIPELINING
  1584.  
  1585.  
  1586. Die Idee des Pipelining ist es, die Ausgabe eines Kommandos zur Einga-
  1587. be des nächsten zu machen. So schreibt z.B. das memex-Kommando ei-
  1588. nen Speicherbereich auf seine Ausgabe, und das hd-Kommando fertigt von
  1589. seiner Eingabe ein Hexdump an. Mit dem Pipelining können beide Kom-
  1590. mandos verbunden werden, d.h. man bekommt ein Hexdump eines Spei-
  1591. cherauszuges.
  1592. Um zwei Kommandos in einer Pipeline zu verbinden, wird zwischen sie
  1593. ein senkrechter Strich (|), auch Pipe genannt, gesetzt, z.B.:
  1594.     hd sh.ttp | pg
  1595. Die Ausgabe des hd-Kommandos (ein langer Hexdump) wird zur Eingabe
  1596. des pg-Kommandos, wodurch der Hexdump seitenweise angezeigt wird.
  1597. Die Schreibweise a | b ist äquivalent zu: (a und b sind beliebige Kom-
  1598. mandos incl. ihren Parametern)
  1599.  
  1600.     TMP=$PIPDIR\pip$$
  1601.     a > $TMP
  1602.     chmod +h $TMP
  1603.     b < $TMP
  1604.     rm $TMP
  1605.     unset TMP
  1606.  
  1607. (mit drei kleinen Unterschieden: 1) zum Bilden eines eindeutigen Dateina-
  1608. mens wird nicht $$, sondern ein anderer Zähler benutzt, 2) die Datei
  1609. wird nach dem Anlegen und nicht erst nach dem Ende von a unsichtbar
  1610. gemacht und 3) es wird keine Shellvariable benutzt.)
  1611. Dies ist ein wesentlicher Unterschied zu Unix, wo alle an einer Pipe be-
  1612. teiligten Kommandos (Prozesse) gleichzeitig laufen. Eine Pipeline ist unter
  1613. Unix eine Einrichtung des Betriebssystems, die von der Okami-Shell nur
  1614. simuliert wird. (Wie gesagt, Okami ist eine Shell und kein Betriebssys-
  1615. tem.)
  1616.  
  1617. Das Laufwerk und der Ordner, auf dem die Pipe-Dateien erzeugt werden,
  1618. kann mit der Shellvariablen PIPDIR eingestellt werden. Die Defaulteinstel-
  1619. lung beim Start der Shell ist $HOME. Dadurch bietet sich die Möglich-
  1620. keit, die Pipe-Dateien auf ein schnelles Laufwerk zu legen, z.B. auf eine
  1621. Ramdisk oder eine wenig benutzte Partition der Festplatte.
  1622. VORSICHT: Wenn $PIPDIR auf einen nicht existierenden Ordner oder
  1623. Laufwerk eingestellt ist, erscheinen anstelle von Pipe-Operationen nur
  1624. Fehlermeldungen der Form:
  1625.     Error: cannot open .....\pip3
  1626. (Anstelle von ...... steht der Inhalt von PIPDIR.)
  1627. In diesem Fall wird keins der an einer Pipe beteiligten Kommandos aus-
  1628. geführt.
  1629. Abhilfe schafft das Kommando
  1630.     mkdir -r $PIPDIR/
  1631. im Profile nach dem Einstellen von PIPDIR. Dadurch werden alle zu
  1632. $PIPDIR gehörenden Unterverzeichnisse erzeugt.
  1633.  
  1634. Die Pipe-Datei kann mit folgendem Kommando sichtbar gemacht werden:
  1635.     ls -a $PIPDIR\pip* | cat
  1636.  
  1637.  
  1638. INLINE-DOKUMENTE
  1639.  
  1640. Als Inline- oder Hier-Dokument wird eine spezielle Art der Eingabeumlei-
  1641. tung bezeichnet, bei der die einem Kommando zuzuführende Eingabe di-
  1642. rekt von der Eingabe oder z.B. dem Shellscript stammt. Beispiel:
  1643.  
  1644.  
  1645.     cat <<eof
  1646.     Das ist ein Text, der
  1647.     zu der Eingabe des cat-
  1648.     Kommandos wird.
  1649.     eof
  1650.  
  1651. Diese Zeilen können von der Tastatur eingegeben, aber auch in einem
  1652. Shellscript oder einer Shellfunktion stehen.
  1653. Die Shell betrachtet die Zeichenkette nach "<<" als Terminierungsstring
  1654. und schreibt die nachfolgenden Zeilen in eine Datei, die dann als Eingabe
  1655. des Kommandos benutzt wird. Das Inline-Dokument wird durch eine Zeile
  1656. beendet, die nur (bis auf führende Leerzeichen) aus dem Terminierungs-
  1657. string besteht.
  1658. Wenn den << direkt ein Minuszeichen folgt, also z.B.
  1659.     cat <<-eof
  1660. , werden alle führenden Leerzeichen der Eingabezeilen entfernt. Das Mi-
  1661. nuszeichen gehört nicht zu dem Terminierungsstring.
  1662. Die Shell führt auf allen eingelesenen Zeilen Variablensubstitutionen und
  1663. Command Substitution aus.
  1664.  
  1665. Inline-Dokumente sind sinnvoll in Shellscripts, die mehrzeilige Ausgaben
  1666. erzeugen sollen, wodurch sich Reihen von echo-Kommandos vermeiden
  1667. lassen.
  1668.  
  1669.  
  1670. 2) Für externe Kommandos
  1671.  
  1672. Theoretisch funktionieren sämtliche Ein/Ausgabe-Umleitungen inklusive der
  1673. Pipeline auch mit externen Kommandos. In der Praxis jedoch erlauben
  1674. nicht alle Programme diese Möglichkeit, z.B weil sie Tastatur und Bild-
  1675. schirm direkt über die entsprechenden Bios-Funktionen (Bconout etc.) an-
  1676. sprechen, die sich nicht umleiten lassen.
  1677. Die Okami-Shell leitet die Ein/Ausgabe auf Gemdos-Basis um, was bedeu-
  1678. tet, daß alle Programme, die für die Ein/Ausgabe Gemdos-Funktionen
  1679. (Cconout etc.) benutzen, umgeleitet werden können. C-Programme, die die
  1680. Standard-Streams stdin und stdout benutzen, werden normalerweise kor-
  1681. rekt umgeleitet.
  1682. GEM-Programme sind von vornherein gegen jede Art der Umleitung im-
  1683. mun, da sie den Bildschirm über den entsprechenden GEM-Gerätetreiber
  1684. ansprechen.
  1685.  
  1686.  
  1687. ----------------------------------------------------------------------------
  1688. COMMAND SUBSTITUTION
  1689.  
  1690. Die Okami-Shell bietet die Möglichkeit, die Ausgabe eines Kommandos in
  1691. eine Kommandozeile einzubauen. Möchte man z.B. eine Ausgabe wie "Es
  1692. sind ... Bytes frei" erzeugen, in die die Anzahl der freien Bytes (die mit
  1693. dem Kommando mem ermittelt werden kann) eingebaut sind, dann kann
  1694. die Ausgabe von mem auf folgende Weise in das echo-Kommando einge-
  1695. baut werden:
  1696.  
  1697.     echo Es sind `mem` Bytes frei.
  1698.  
  1699. Alles, was in einer Eingabezeile zwischen zwei Accent grave (`) steht,
  1700. wird als Kommando betrachtet und ausgeführt. Die Ausgabe wird anstelle
  1701. der in Accent grave stehenden Zeichenkette in die Eingabezeile einge-
  1702. setzt. Dieses Verfahren wird als Command Substitution bezeichnet.
  1703. Wenn die Ausgabe des Kommandos über mehrere Zeilen geht, wird nur
  1704. die erste Zeile (also die Ausgabe bis zum ersten Zeilenende) benutzt.
  1705. Als Zwischenspeicher für die Ausgabe des Kommandos wird eine Datei
  1706. namens $PIPDIR/csubXXXX benutzt. XXXX ist hierbei eine laufende
  1707. Nummer, und $PIPDIR ist das Laufwerk, über das auch die Pipelining-
  1708. Operationen laufen. Diese Datei wird nach Verwendung gelöscht.
  1709.  
  1710. Beispiele:
  1711.     Speichern der Shellflags:    SET=`set -`
  1712.     Wiederherstellen mit:        set $SET
  1713.  
  1714.     Anzeigen einer Datei, die in demselben Ordner liegt wie $FILE1, die
  1715.     aber denselben Basisnamen wie $FILE2 hat:
  1716.         cat `dirname $FILE1`/`basename $FILE2`
  1717.  
  1718.     Löschen der ältesten Datei mit Nachfrage:
  1719.         rm -i `ls -t`
  1720.  
  1721.  
  1722. ----------------------------------------------------------------------------
  1723. ENVIRONMENT
  1724.  
  1725. Die Okami-Shell bietet die Möglichkeit, Definitionen von Shell-Variablen in
  1726. das Environment zu übernehmen. Diese Definitionen werden dann allen
  1727. gestarteten Programmen übergeben. Mit dem internen Kommando export
  1728. können beliebige Shellvariablen in das Environment ausgenommen oder
  1729. daraus entfernt werden.
  1730.  
  1731. In der Basepage eines Programms steht ab Offset 0x2c die Adresse des
  1732. Environment-Strings. Diese Adresse wird berechnet als:
  1733.     char *BaseAdr;
  1734.     char *EnvAdr;
  1735.     EnvAdr = *(char **)(BaseAdr+0x2c);
  1736. BaseAdr ist die Adresse der Basepage (wird irgendwie vom Compiler zur
  1737. Verfügung gestellt). EnvAdr ist dann die Adresse des Environment-Strings.
  1738. Dieser String hat folgende Syntax:
  1739.  
  1740.  EnvString    ::=  { VarDefinition } "\0"
  1741.  VarDefinition    ::= VarName "=" VarWert "\0"
  1742.  
  1743. Beispiel:
  1744.     "a=Variable a\0b=Variable b\0usw=undsoweiter\0\0"
  1745. Es werden folgende Variablen gesetzt:
  1746.     a   auf  "Variable a"
  1747.     b   auf  "Variable b"
  1748.     usw auf  "undsoweiter"
  1749.  
  1750.  
  1751.  
  1752. ----------------------------------------------------------------------------
  1753. GRÜSSE
  1754.  
  1755. 1) An die Firma GRP in Aachen, für lebenswichtige Kenntnisse in C und
  1756. Unix.
  1757.  
  1758. 2) Für die Begleitung in zahllosen Stunden voller Lust und Frust vor der
  1759. flimmerfreien Flimmerkiste:
  1760. Mike Oldfield, The Beatles, Little Richard, Bill Haley, Tommy Roe, Lesley Gore,
  1761. Pat Boone, Elvis Presley, Chuck Berry, Del Shannon, Chris Montez, Billy Joe Roy-
  1762. al, The Box Tops, The Cascades, Trini Lopez, Chris Andrews, Mary Hopkins, The
  1763. Tremoloes, Bobby Vee, The Kinks, The Turtles, The Swinging Blue Jeans, Shane
  1764. Fenton & The Fentones, The Piltdown Men, Helen Shapiro, Cliff Richard, The
  1765. Cowsills, Jerry Lee Lewis, Melanie, Buddy Hollie, The Lovin' Spoonful, The Cry-
  1766. stals, The Knickerbockers, The Crests, Every Mother's Son, The Shangri Las, Ber-
  1767. nard Cribbins, The Shadows, Frank Ilfield u.v.a.
  1768.  
  1769.  
  1770.  
  1771.  
  1772.  
  1773.  
  1774.  
  1775.  
  1776.  
  1777. Diese Anleitung wurde mit Tempus Word von CCD erstellt.
  1778. Atari ST,  GEM, Unix, MS-Dumpf usw. sind eingetragene Warenzeichen von - ach das wißt Ihr schon? Na gut.
  1779.  
  1780.