Copyright Digital Equipment Corp. All rights reserved.

Examples

   1.$ PIPE SHOW SYSTEM | SEARCH SYS$INPUT HIB

     This example uses the pipeline function to identify all
     hibernating processes on the system in one command.

   2.$ PIPE RUN TEST | SORT/SPECIFICATION=TEST.SRT SYS$INPUT SYS$OUTPUT -
        | DIFF SYS$INPUT  TEST.BENCHMARK

     This example uses the pipeline function to run a test, sort
     the result, and compare the result to the benchmark file in
     a single command without generating unnecessary intermediate
     files.

   3.$ PIPE  ( SET DEF WRK$:[WORK] ; RUN REPORT ) | MAIL SYS$INPUT SMITH

     This example shows one way a subshell can be specified as a
     pipe segment command in a pipeline.

   4.$ more :== TYPE/PAGE=SAVE SYS$INPUT
     $ PIPE    ANA/RMS PAGE.TXT | more

     Check RMS File Integrity                26-DEC-2001 16:12:00.06  Page 1
     SYS$SYSDEVICE:[TEST]PAGE.TXT;2

     FILE HEADER

         File Spec: SYS$SYSDEVICE:[TEST]PAGE.TXT;2
         File ID: (4135,58220,0)
         Owner UIC: [PIPE]
         Protection:  System: RWED, Owner: RWED, Group: RE, World:
         Creation Date:   26-NOV-2001 16:08:50.05
         Revision Date:   26-NOV-2001 16:09:09.06, Number: 1
         Expiration Date: none specified
         Backup Date:     none posted
         Contiguity Options:  none
         Performance Options: none
         Reliability Options: none
         Journaling Enabled:  none

     RMS FILE ATTRIBUTES

     RETURN/SPACE=More, PREV/NEXT=Scroll, INS/REM=Pan, SELECT=80/132, Q=Quit

     This example shows the use of the /PAGE qualifier within a
     pipeline. The /PAGE function exists in a number of other DCL
     commands as well, and can be used similarly in conjunction with
     the PIPE command to form other useful tools.

   5.$ ! TEE.COM - command procedure to display/log data flowing through
     $ !           a pipeline
     $ ! Usage: @TEE log-file
     $
     $ OPEN/WRITE  tee_file 'P1'
     $ LOOP:
     $  READ/END_OF_FILE=EXIT  SYS$PIPE LINE
     $  WRITE SYS$OUTPUT LINE ! Send it out to next stage of the pipeline
     $  WRITE tee_file LINE  ! Log output to the log file
     $  GOTO LOOP
     $ EXIT:
     $  CLOSE tee_file
     $  EXIT

     This is an example of a pipeline DCL application TEE.COM.

     The PIPE command to use TEE.COM can be:

       $ PIPE  SHOW SYSTEM | @TEE showsys.log | SEARCH SYS$INPUT LEF

     The command procedure TEE.COM is used to log the data flowing
     through the pipeline. It reads in the data from SYS$PIPE
     instead of SYS$INPUT.

   6.$ CD_WORK :== PIPE   SAVE_DIR=F$DIRECTORY() ; SET DEFAULT FOO:[WORK]
     $ BACK  :== SET DEF 'SAVE_DIR'
     $
     $ CD_WORK  ! Switch to working directory
     $     :
     $     :
     $ BACK     ! Switch back to home directory

     $ GET_RECORD :== PIPE READ/END_OF_FILE=CLEANUP IN RECORD ; -
                 F$EDIT(RECORD, "COMPRESS, TRIM")
     $
     $ OPEN IN EMPLOYEE.DAT
     $ LOOP:
     $ GET_RECORD
     $    :
     $    :
     $ GOTO LOOP
     $
     $ CLEAN_UP:
     $    :

     This example shows two simple uses of multiple commands with
     symbol definitions to build useful tools in command procedures.

   7.$ PIPE cc foo.c && link foo

     If the compilation does not generate any error, the object
     file is linked to produce an executable image. If the program
     compilation generates an error, the linking step is skipped.

   8.$
     $ PIPE RUN COLLECT_DATA.EXE || GOTO CLEAN_UP
     $   :
     $  :
     $ EXIT
     $
     $ CLEAN_UP:
     $ :
     $  :

     Using conditional command execution, it is easy to set up
     simple error handling control flow in a command procedure.
     If the image COLLECT_DATA fails, control is directed to CLEAN_
     UP.

   9.$ PIPE COPY LARGE_FILE.DAT REMOTE"user password"::[DESTINATION]*.*  &

     This PIPE command creates a background process to handle the
     copying of the large file.

   10$ PIPE (SET DEF [.DATA_DIR] ; BACKUP  DATA.SAV/SAV [...]) ; RUN FOO

     The subshell command sequence is done in a subprocess. This
     means that changing a process-specific characteristic (for
     example, the default directory) will not affect the current
     process after the subshell is finished. In this example, the
     save set is restored in a subdirectory to provide the necessary
     data to run the program FOO.

   11$ RSH 0 PIPE SH DEC/FI | SH LOG/PR

     LNM$PROCESS_TABLE

       "SYS$COMMAND" = "_NODE$MPA24:"
       "SYS$DISK" = "SYS$SYSDEVICE:"
       "SYS$ERROR" = "_BG9930:"
       "SYS$INPUT" [super] = "_BG9930:"
       "SYS$INPUT" [exec] = "_NODE$MPA24:"
       "SYS$OUTPUT" [super] = "_BG9930:"
       "SYS$OUTPUT" [exec] = "_BG9930:"
       "SYS$PIPE" = "_NODE$MPA24:"
       "TT" = "_MPA24:"

     This example shows how SYS$PIPE and SYS$OUTPUT might differ.