SEARCH command, without creating intermediate files, you can use the PIPE command. One way to do this, is using 2 scripts, but it requires the second script to check the existance of SYS$PIPE.The scripts below do nothing useful, but are just for demonstration.
DO_SOMETHING.COM$ IF P1 .EQS. ""
$ THEN
$ WRITE SYS$OUTPUT "NO PARAMETER"
$ ELSE
$ PIPE DIR /SIZE/DATE/OWNER | -
SEARCH SYS$PIPE 'P1' | -
@DO_SOME_MORE | -
TYPE SYS$PIPE > SOME_OUTPUT.TXT
$ ENDIF
$ EXIT
DO_SOME_MORE.COM$ IF F$TRNLNM( "SYS$PIPE" ) .EQS. "" $ THEN $ WRITE SYS$OUTPUT "NO PIPE" $ ELSE $read_loop: $ READ /END=end_loop /ERROR=end_loop SYS$PIPE input_line $ WRITE SYS$OUTPUT F$ELEMENT( 0, ";", input_line ) $ GOTO read_loop $end_loop: $ ENDIF $ EXIT
You can do this with just one DCL script, which contains a
PIPE command, but runs itself again within the PIPE command to process the output of a previous command.DO_SOMETHING.COM$ IF P1 .EQS. ""
$ THEN
$ WRITE SYS$OUTPUT "NO PARAMETER"
$ EXIT
$ ENDIF
$ IF P1 .EQS. "CALL$SELF"
$ THEN
$ CALL do_some_more
$ ELSE
$ do_some_more := @'F$ENVIRONMENT( "PROCEDURE" )' "CALL$SELF"
$ PIPE DIR /SIZE/DATE/OWNER | -
SEARCH SYS$PIPE 'P1' | -
do_some_more | -
TYPE SYS$PIPE > SOME_OUTPUT.TXT
$ ENDIF
$ EXIT
$do_some_more: SUBROUTINE
$read_loop:
$ READ /END=end_loop /ERROR=end_loop SYS$PIPE input_line
$ WRITE SYS$OUTPUT F$ELEMENT( 0, ";", input_line )
$ GOTO read_loop
$end_loop:
$ ENDSUBROUTINE