[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
In AmigaOS 2.04 wurde ein neuer Handler eingeführt, der es erlaubt, Daten zwischen verschiedenen Programmen auszutauschen. Dieser Handler heißt ‘L:Queue-Handler’, ist aber besser als ‘PIPE:’ bekannt.
‘PIPE:’ implementiert eine echte, Unix-artige Pipe
,
mit der man die Standardausgabe eines Programms als Standardeingabe
eines anderen Programms verwenden kann. Es ist auch möglich, mehrere
Programme über mehrere Pipes gleichzeitig zu verketten.
Pipes brauchen weniger RAM für temporäre Dateien, und der
Zugriff ist schneller.
Allerdings unterscheidet sich ‘PIPE:’ von Unix-Pipes in zwei wesentlichen Punkten:
Der Handlername von PIPE: ist vollständig ‘PIPE:name/bufsize/bufnum’,
wobei ‘name’ den verwendeten Pipekanal identifiziert und eindeutig
sein sollte. Durch verschiedene Namen kann man also gleichzeitig mehrere
Pipe-Kanäle öffnen. Die optionalen Argumente bufsize
und
bufnum
geben die Größe und Anzahl der verwendeten Datenpuffer
an. Meist schreibt man einfach ‘PIPE:name’, die Vorgabegröße
ist dann 4096 Bytes und die Anzahl unbegrenzt.
1.1 Verwendung von PIPE: in einer AmigaShell | ||
1.2 Das Pipe-Kommando | ||
1.3 Das Pipe-Kommando in der AmigaShell | ||
1.4 Die _mchar-Variable | ||
1.5 Bekannte Probleme |
Osma Ahvenlampi (Osma.Ahvenlampi@hut.fi)
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Zunächst muß ‘PIPE:’ natürlich mit Mount
angemeldet sein.
Dies kann durch das Kommando
1> Mount PIPE:
in der Shell geschehen, ab AmigaOS 2.1 auch dadurch, daß man die Datei ‘PIPE’ nach ‘DEVS:DosDrivers’ schiebt.
In einem AmigaShell-Fenster kann man dann folgende Kommandos eingeben:
1> Run List SYS: >PIPE:Listoutput 1> More <PIPE:Listoutput
Diese beiden Kommandos erzeugen also zunächst eine Liste der Dateien in ‘SYS:’ und geben diese dann mit Hilfe des More-Kommandos aus. Man könnte auch folgendes probieren:
1> Run List SYS: NOHEAD >PIPE:Listoutput 1> Run Sort PIPE:Listoutput PIPE:Sortedoutput 1> More <PIPE:Sortedoutput
Dies würde also die Liste vor der Ausgabe noch sortieren.
Beachten Sie die Verwendung von Run
außer für das jeweils
letzte Programm, durch die alle Programme gleichzeitig ablaufen.
Man kann auch die Programme gleichzeitig in verschiedenen Shells
ablaufen lassen.
Das Leeren der Pipe kann auch manuell geschehen, vorausgesetzt man kennt den Namen des verwendeten Kanals, indem man folgendes eingibt:
1> Type PIPE:name TO NIL:
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Im vorigen Beispiel ist die Verwendung von Pipes recht kompliziert, vor allem verglichen mit Unix-Pipes. Es gibt aber eine bessere Möglichkeit.
Andy Finkel, der früher bei Commodore gearbeitet hat, hat auch ein
Kommando Pipe
geschrieben (was man nicht mit ‘PIPE:’
verwechseln sollte!), das die Benutzung von Pipes stark vereinfacht.
Unglücklicherweise wurde dieses Programm letzten Endes dann doch nicht
in die offizielle Workbench aufgenommen, allerdings mit Billigung
von Commodore veröffentlicht (Quellen: Fish-Disk 637, Aminet,
‘util/cli/finkelshelltools.lha’). Dieses Programm arbeitet auch
unter OS3.1 noch problemlos.
Die Verwendung des Pipe-Kommandos ist einfach. Man übergibt die auszuführenden Programme als Argumente an Pipe, getrennt durch das Zeichen <|>, z.B.
1> Pipe List SYS: | More oder 1> Pipe List: SYS: NOHEAD | Sort IN: OUT: | More
Beachten Sie die Verwendung von ‘IN:’ und ‘OUT:’, die nötig sind, weil das Sort-Kommando nicht von der Standardeingabe lesen und nicht auf die Standardausgabe schreiben kann. Diese Devices werden durch das Kommandos Pipe simuliert. Durch die Environment-Variable _pchar kann man auch ein anderes Zeichen anstelle von <|> verwenden.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Es gibt ein sehr nützliches, allerdings undokumentiertes Feature der AmigaShell: Diese kennt das Pipe-Kommando! Ist die lokale Variable _pchar gesetzt, dann kann man Pipes sogar ohne Eingabe des Pipe-Kommandos benutzen. Die Shell erkennt das durch _pchar vorgegebene Zeichen und ruft für Kommandozeilen, die es enthalten, automatisch Pipe auf.
Am besten wird das folgende Kommando in ‘s:Shell-Startup’ eingetragen:
1> Set _pchar "|"
(2) Man kann die vorigen Beispiele dann so ausführen:
1> List SYS: | More oder 1> List SYS: NOHEAD | Sort IN: OUT: | More
Dies entspricht also völlig den Unix-Pipes.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Die lokale Variable _mchar legt das Zeichen fest, das als Kommandotrenner dient. Setzt man also
1> Set _mchar ";"
dann kann man in der Shell die Befehle hintereinanderfügen, durch den Strichpunkt getrennt.
[ << ] | [ < ] | [ Up ] | [ > ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
Ich bekomme die Fehlermeldung
PIPE: Unknown command
wenn ich das Kommando ‘List SYS: | More’ ausführe, obwohl
‘PIPE:’ mit Mount
angemeldet ist. Was ist falsch?
Die Shell sucht nach dem Kommando Pipe
in der Fehlermeldung,
nicht nach dem ‘PIPE:’-Device. Dieses Kommando ist also nicht
im Suchpfad (meist in ‘C:’) installiert.
Ein Requester meldet
Please insert volume PIPE: in any drive
wenn ich eines der Kommandos aus den Beispielen ausführen will.
‘PIPE:’ ist nicht angemeldet. Dies kann mit ‘Mount PIPE:’ geschehen.
Wenn ich eines der Beispiele ausführe, dann eröffnet das
More
-Kommando ein Fenster, aber dort erscheint nichts/
eine Fehlermeldung erscheint/ein Filerequester erscheint.
Sie verwenden ein anderes More-Kommando als das aus der Workbench. Verwenden Sie einen anderen Namen oder installieren Sie ein More, das Pipes unterstützt, z.B. das More von Commodore, Less oder Most.
[Top] | [Contents] | [Index] | [ ? ] |
Dabei ‘1>’ der Prompt der AmigaShell, die eine Eingabe erwartet. Die Nummer kann natürlich variieren.
Die Anführungsstriche sind wesentlich! Wenn _pchar bereits gesetzt ist, wird sonst angenommen, es handele sich bereits um einen Aufruf von Pipe. Dies kann etwa dann geschehen, wenn aus einer Shell eine neue gestartet wird.
[Top] | [Contents] | [Index] | [ ? ] |
This document was generated on January 9, 2023 using texi2html 5.0.
The buttons in the navigation panels have the following meaning:
Button | Name | Go to | From 1.2.3 go to |
---|---|---|---|
[ << ] | FastBack | Beginning of this chapter or previous chapter | 1 |
[ < ] | Back | Previous section in reading order | 1.2.2 |
[ Up ] | Up | Up section | 1.2 |
[ > ] | Forward | Next section in reading order | 1.2.4 |
[ >> ] | FastForward | Next chapter | 2 |
[Top] | Top | Cover (top) of document | |
[Contents] | Contents | Table of contents | |
[Index] | Index | Index | |
[ ? ] | About | About (help) |
where the Example assumes that the current position is at Subsubsection One-Two-Three of a document of the following structure:
This document was generated on January 9, 2023 using texi2html 5.0.