DCL users can use the DEFINE or ASSIGN command to redirect
SYS$INPUT, SYS$OUTPUT, or SYS$ERROR. Such redirection can be
created as either the user-mode (using the /USER_MODE qualifier)
or supervisor-mode (using the /SUPERVISOR_MODE qualifier)
redirection. A user-mode redirection only affects the environment
of the next user-mode image.
In a PIPE command, redirection can be achieved by using the
redirection syntax. A PIPE command redirection is quite different
from that created by the DEFINE or ASSIGN command, as follows:
o Redirections are created in supervisor mode. This means that
both user-mode applications and DCL commands are affected by
the redirections.
o The redirected environment only applies to the command
sequence or the pipeline-segment command that specifies
the redirection syntax. After the execution of the command
sequence or pipeline-segment command, the original process
input/output environment (that is, SYS$INPUT, SYS$OUTPUT, and
SYS$ERROR) is restored before command execution continues.
When SYS$OUTPUT is redirected, the redirected output file is
always created, whether or not the command sequence actually
writes to SYS$OUTPUT. If a version of a file with the same name
as the redirected output file already exists, a new version of
that file is created. (This behavior is the same as using the
DEFINE or ASSIGN command to redefine SYS$OUTPUT in supervisor
mode.) Note that the redirected file is created before the
command sequence is executed. If the redirected file is also
used in the command sequence, the operation may fail, as in the
following example:
$ PIPE SEARCH TRANS.LOG "alpha" > TRANS.LOG
%SEARCH-W-OPENIN, error opening TRANS.LOG;2 as input
-RMS-E-FLK, file currently locked by another user
In this example, a new version of TRANS.LOG is created and opened
for write access; the SEARCH command then tries to get read
access to the most recent version of TRANS.LOG instead of the
expected previous version.
When SYS$ERROR is redirected, the redirected error file is
only created when the command sequence actually writes to the
SYS$ERROR during execution, and there is no existing file with
the same name as the redirected error file. If a file with the
same name as the redirected error file already exists, that
file is opened as the redirected error file. The error output
generated by this command sequence is then appended to the end
of the redirected error file. (This behavior is the same as using
the DEFINE or ASSIGN command to redefine SYS$ERROR in supervisor
mode.)