VMS Help  —  PIPE  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.
Close Help