[an error occurred while processing this directive]
HP OpenVMS Systems Documentation |
OpenVMS 用户手册
13.6.3.1 限制执行命令过程时应用以下限制:
13.6.4 以交互方式执行命令过程要交互地执行命令过程,输入一个执行过程命令 (@) 后面跟随命令过程的文件说明。 例如,这个命令执行在 WORKDISK: 磁盘上 [MAINT.PROCEDURES] 目录中的过程 SETD.COM:
您可以定义一个表示长命令行的符号名。然后使用这个符号执行命令过程。 要使用一个符号执行上一个例子展示的命令过程,把这行包括在您的注册命令过程中:
然后,要执行过程 SETD.COM,可输入这个符号名,如同其他命令:
按照默认,交互地执行命令过程时,操作系统把输出显示在终端上。然而,执行命令时使用 /OUTPUT 限定词可以把输出重定向到一个文件。 您把命令过程输出重定向到一个文件时,这个过程把任何出错消息发送到终端和接收输出的文件。 这个命令把 SETD.COM 的输出写入文件 RESULTS.TXT,而不是终端:
总是把 /OUTPUT
限定词放在命令过程名之后,中间没有空格。否则,DCL 把这个限定词解释为传递给过程的参数。 如果使用的命令过程需要很长的处理时间 (例如,编译或汇编大的程序),那么把这些过程提交为批量作业,将允许您继续交互地使用终端。 要以批量模式执行命令过程,输入 DCL 命令 SUBMIT 可把命令过程提交到批队列 (一个等待执行的批量作业列表)。当提交作业时,它被放入默认批队列 SYS$BATCH,在此它被添加到等待执行的作业队列末端。当在您之前的作业完成时,就执行您的作业。在 OpenVMS 系统上,可以同时执行的批量作业的数目由系统管理员在建立这个批队列时指定。 以下例子展示如何执行命令过程 JOB1.COM。SUBMIT 命令使用默认文件类型 .COM;如果命令过程有文件类型 .COM 时就不必输入文件类型:
13.6.5.1 远程批量作业
如果您的系统是网络的一部分,那么可以把命令过程提交为远程节点上的批量作业。在命令过程中,您可以使用 DCL 命令打开和关闭远程节点上的文件,并且使用与局部文件一样的命令和限定词,读取和写入那些文件的记录。 按照默认,如果在作业完成之前系统失败,那么批量作业就从第一行开始重新执行。然而,可以在命令过程中使用以下符号指定不同的重新启动点:
以下过程描述如何使用 $RESTART 和 BATCH$RESTART 符号:
以下命令过程从一个库中抽取许多模块、连接那些模块,然后排序作为结果的文件:
如果这个命令过程异常结束,它就从文件开始、从标号为 CONCATENATE_LIBRARIES
的语句或者从标号为
SORT_FILE 的语句重新执行,视 BATCH$RESTART
的值而定。如果抽取了许多独立的模块,就可使每个抽取作为一个独立段。
以下几节描述如何执行在磁盘和磁带卷上的命令过程。
用 SUBMIT
命令提交命令过程时,不能存取在已分配设备上的文件。然而,您可以执行位于专用磁盘上的命令过程,并且使用 /SHARE 限定词装上这个磁盘。 您可以执行驻留在磁带卷上的命令过程,如果:
如果出现这些条件之一,完成以下动作可以执行这个命令过程:
13.7 退出和中断命令过程
命令级是 DCL
级解释程序的输入流。在终端输入命令时,是在命令级 0 输入命令。简单交互命令过程
(如 CLEANUP.COM) 在命令级 1 执行。当这个过程终止并且 DCL 提示重新出现在屏幕上,就退回到命令级 0。 有三种方法退出正在执行的命令过程:
如果退出原因是过程结束或者 EXIT 命令,那么控制返回下一个更高的命令级。把一个值指定为 EXIT 命令的参数,可以把这个状态值返回给下一个更高的命令级。 如果在 DCL 级调用命令过程 SUB,而 SUB 又调用子例行程序 SUB1,那么发生以下事情:
如果退出原因是 STOP 命令,那么控制总是返回到 DCL 命令级,不管执行的 STOP 命令处于哪一个命令级。 如果在批量作业中执行 STOP 命令,批量作业就终止。 按下 Ctrl/Y 可以中断命令过程,然后使用 EXIT 或 STOP 命令可终止这个过程。在这种情况下,EXIT 和 STOP 命令都返回到 DCL 级。 在以下例子中,按下 Ctrl/Y 可中断 TESTALL 过程。EXIT 命令终止这个过程的处理,并返回到 DCL 级。(注意,在中断过程后,也可以输入 STOP 命令 。)
13.7.2 退出处理例行程序
中断命令过程时,如果中断的命令 (或映象)
声明任何退出处理例行程序,那么 EXIT 命令给出这些例行程序控制。然而,STOP 命令不执行这些例行程序。 按照默认,命令出错或严重出错时,命令解释程序执行一个 EXIT 命令。这使过程退到上一个命令级。对于其他严重级 (成功、警告和通知),命令过程继续。 命令解释程序处理出错有一个例外方法。如果在命令过程中引用一个标号而这个标号不存在 (例如,如果包括命令 GOTO ERR1,而在这个过程中 ERR1 没有用作一个标号),那么 GOTO 命令发出一个警告并且退出命令过程。 当系统发出一个 EXIT 命令作为出错处理例行程序的一部分时,它把 $STATUS 的值传递给上一个命令级,并且有一个更改。命令解释程序把 $STATUS 的高端数字设置为 1,以便命令解释程序不会重新显示与这个状态值关联的消息。 在以下例子中,命令过程 TEST.COM 在输出文件说明中包含一个错误:
执行这个过程时,CREATE 命令用 $STATUS 返回错误,并且显示相应的消息。然后,命令解释程序检查 $STATUS 的值,确定已发生错误,发出 EXIT 命令并返回 $STATUS 的值。当这个过程退出时,这个出错消息不会重新显示,因为 CREATE 命令已经显示了这条消息一次。在 DCL 命令级,可以查看包含出错消息的 $STATUS,但是其高端数字已设置为 1。例如:
13.8.1 默认出错动作以下表格描述当命令过程正在执行而发生出错条件或者 Ctrl/Y 中断时采取的默认动作。可以使用 ON、SET [NO]ON 和 SET [NO]CONTROL=Y 命令取代这些默认动作。
13.9 其他处理出错方法
以下几节描述处理出错的其他方法。
如果发生一个严重或更严重的出错,那么 ON 命令指定要执行的动作。如果发生这样的出错,系统采取以下动作:
一个 ON 命令动作只执行一次。因此,在命令过程执行 ON 命令指定的动作之后,其默认出错动作被重新设置。 ON 命令指定的动作只应用于执行这个命令所在的命令级。因此,如果在一个调用另一个过程的过程中执行一个 ON 命令,那么 ON 命令动作不应用于嵌套的过程。 ON 命令的格式如下所示:
在此,"condition" 是以下关键字之一:
如果为特定严重级建立 ON 命令动作,那么当发生同级或更严重的出错时命令解释程序就执行指定的动作。当发生较轻的出错时,命令解释程序继续处理这个文件。 这个命令可以用来取代默认出错处理,以便当发生警告、出错或严重出错时退出过程:
如果命令过程包括这个命令,那么命令过程正常执行直到出错或严重出错为止:
如果发生这样的出错,那么过程在 ERR1 恢复执行。$STATUS 和 $SEVERITY 设置为成功,而默认出错动作被重新设置。如果在另一个 ON 或 SET NOON 命令执行之前发生第二个出错,那么这个过程退到上一个命令级。ON 命令指定的动作只应用于执行这个命令的命令级。因此,如果在一个调用另一个过程的过程中执行 ON 命令,那么 ON 命令动作不应用于嵌套的过程。 图 13-1 说明 ON 命令动作。 图 13-1 ON 命令动作
在附录 B 中的样例命令过程 FORTUSER.COM 和 CALC.COM 也说明使用 ON 命令建立出错处理
。 在命令过程中使用 SET NOON 命令,把 ON 命令设置为 NO 状态,可以阻止命令解释程序检查从命令返回的状态。使用 SET NOON 命令时,命令解释程序继续把值放入 $STATUS 和 $SEVERITY,但不执行任何出错检查。使用 SET ON 命令或 ON 命令,可以恢复出错检查。 当过程撤消出错检查时,它可以在命令或程序执行之后明确地检查 $STATUS 的值。 在以下例子中,在 RUN 命令之前的 SET NOON 命令确保如果程序 TESTA 或 TESTB 返回一个出错条件时,命令过程就继续。SET ON 命令恢复命令解释程序的默认出错检查。
在以下例子中,第一个 IF 命令检查 $STATUS 是否有真值 (即,如果它是奇数值)。如果有,FORTRAN 命令就成功,而 LINK 命令就执行。在 LINK 命令执行之后,再次测试 $STATUS。如果 $STATUS 是奇数,RUN 命令就执行;否则,RUN 命令不执行。SET ON 命令恢复当前的 ON 条件动作;即是说,在 SET NOON 命令执行之前的条件有效:
SET ON 或 SET NOON
命令只应用于当前命令级;即是这个命令执行的命令级。如果在调用另一个命令过程的命令过程中使用 SET NOON 命令,那么默认出错检查机制将在嵌套的过程中有效。注意,在 DCL 级交互输入 SET NOON 没有意义。 按照默认,当命令过程正在执行时按下 Ctrl/Y,命令解释程序在一个特殊的命令级 (称为 Ctrl/Y 命令级) 提示输入命令。在 Ctrl/Y 命令级,可以输入在命令解释程序中执行的 DCL 命令,然后用 CONTINUE 命令恢复命令过程的执行。另外,输入一个强制命令过程停止执行的 DCL 命令,您可以停止这个过程。
本节描述一些取代方法,命令过程使用 ON 命令处理 Ctrl/Y
中断。
按下 Ctrl/Y,您可以中断正在交互执行的命令过程。您按下 Ctrl/Y 时,命令解释程序建立一个新命令级,称为 Ctrl/Y 级,并提示输入命令。当中断发生取决于正在执行的命令或程序时:
在 Ctrl/Y 级,命令解释程序存储所有以前建立命令级的状态,使它在任何 Ctrl/Y 中断之后都可以恢复到正确的状态。 在中断过程之后,您可以做以下事情:
|