Discussion:
streams und OpenVMS
(zu alt für eine Antwort)
Erwin Cramer
2012-10-15 13:30:45 UTC
Permalink
Hallo,

wenn ich sys$input umlenke, z.B. auf eine Textdatei mit den Eingaben und anschl. mit @x.com eine Kommandoprozedur aufrufe, funktioniert das irgendwie nicht.

Leider habe ich auch nirgends etwas finden können, wie soetwas gehen könnte.
Hintergrund sind Überlegungen zum automatischen Testen von DCL-Scripten mit definierten Eingabewerten aus einer Textdatei und der Auswertung der Ausgabedatei.

Kann ich da etwas falsch gemacht haben?
$ define /user sys$input pin.txt
$ @x

Und wenn ich sys$command umlenke, kommt eine Fehlermeldung .

In x.com werden Eingabewerte abgefragt mit:
read sys$command wert /prompt = " ... "
oder
inq wert "Prompt"

Vielen Dank & Gruß
Erwin
hallo,
wie funktionieren eigentlich streams unter OpenVMS?
Unter Unix kann man ja mit > (bzw. 2> und <) die Eingabe, Ausgabe,
Fehler Streams umbiegen.
die Standard-Streams heißen unter OpenVMS SYS$INPUT, SYS$OUTPUT und
SYS$ERROR und können mit $ DEFINE [/USER] umdirigiert werden (/USER sorgt
dafür, daß die Definition nur für den nächsten Programmaufruf gilt und dann
automatisch wieder verschwindet).
Also z.B.
$ DEFINE /USER SYS$OUTPUT ERGEBNIS.TXT
$ RUN MYPROG
$
sorgt dafür, daß die Ausgabe des Programms MYPROG in der Datei ERGEBNIS.TXT
landet, anstatt auf der Konsole/im Temrinalfenster angezeigt zu werden.
--
-------------- speaking only for myself -------------
Compaq Computer Austria / Global Services
ein Unternehmen der neuen HP
Joseph Huber
2012-10-16 08:01:06 UTC
Permalink
Post by Erwin Cramer
wenn ich sys$input umlenke, z.B. auf eine Textdatei mit den Eingaben und
irgendwie nicht.
Leider habe ich auch nirgends etwas finden können, wie soetwas gehen
könnte. Hintergrund sind Überlegungen zum automatischen Testen von
DCL-Scripten mit definierten Eingabewerten aus einer Textdatei und der
Auswertung der Ausgabedatei.
Kann ich da etwas falsch gemacht haben?
$ define /user sys$input pin.txt
Das 'umlenken' mit define/user bezieht sich nur auf das naechste aufgerufene
IMAGE, d.h. das SYS$INPUT (stdin, fortran default unit 5) des programs zeigt
auf den umgelenkten file sys$input (wie Hans das in vorheriger reply
erklaert hat).
Eine DCL prozedur dagegen definiert immer beim start SYS$INPUT auf sich
selbst, x.com, egal was fuer eine definition SYS$INPUT vorher hat.
Wenn x.com also etwas von x.com lesen will, dann nicht von sys$input,
Post by Erwin Cramer
Und wenn ich sys$command umlenke, kommt eine Fehlermeldung .
read sys$command wert /prompt = " ... "
oder
inq wert "Prompt"
sys$command als DCL permant offenes file kann man nicht so einfach
umdefinieren.
So aber gehts:

$cat tmp.com
$ read sys$command x /prompt="prompt1"
$ write sys$output x
$ read sys$command x /prompt="prompt2"
$ write sys$output x
$ cat tmp.txt
antwort 1
antwort 2

Dann sys$command nach tmp.txt umlenken:

$ define sys$command/exec sys$pipe
$ pipe copy tmp.txt sys$output | @tmp
antwort 1
antwort 2
$ deass sys$command

INQUIRE scheint magisch statt sys$command von sys$pipe zu lesen:

cat tmp_inquire.com
$ inquire x "prompt1"
$ write sys$output x
$ inquire x "prompt2"
$ write sys$output x

$ pipe copy tmp.txt sys$output | @tmp_inquire
ANTWORT 1
ANTWORT 2

Fazit: man kann schon input von sys$command umlenken !
--
Remove NOREPLY. from Email address.
Joseph Huber, http://www.huber-joseph.de
Joseph Huber
2012-10-16 08:30:58 UTC
Permalink
Post by Joseph Huber
Wenn x.com also etwas von x.com lesen will, dann nicht von sys$input,
Korrektur, muss heissen:
Wenn x.com also etwas von x.dat lesen will, dann nicht von sys$input,
sondern explicit von sys$pipe:
--
Remove NOREPLY. from Email address.
Joseph Huber, http://www.huber-joseph.de
Loading...