OpenVMS - 批量检查是否运行最新版本的脚本

时间:2014-04-30 11:59:04

标签: openvms dcl

是否可以对批处理脚本进行编码以检查是否已添加任何版本,因为这个版本已排队,如果是,则运行更新的脚本。

我可以通过对其进行子脚本编写来实现这一点,但这意味着每个脚本都有2个脚本。

感谢您的帮助。

3 个答案:

答案 0 :(得分:3)

f $ environment和f $ search是您可能想要使用的词法函数。我的示例使用f $ extract剥离版本,但您可能希望使用f $ parse。

$ this = f$environment("PROCEDURE") 
$ write sys$output "This is ", this
$ noversion = f$extract (0,f$locate(";",this),this)
$ write sys$output "without version it is ", noversion
$ latest = f$search (noversion)
$ write sys$output "latest version is ", latest
$ if this .nes. latest -
        then $ write sys$output "There is a new version!"

答案 1 :(得分:1)

对于典型的自提交批处理作业,最重要的是在重新提交之前至少剥离版本以获取当时版本。这里有一个使用F $ ELEMENT的例子(比F $ PARSE容易得多: - )。

$  redo = "submit/log/noprint/noti/queue=" + -
      f$getqui("DISPLAY_QUEUE","QUEUE_NAME","*","THIS_JOB")
$  restart = "tomorrow + 07:00:00"               ! First daily run,  Alter as needed.
$  if time.lts."12:00" then restart = "17:00:00" ! Second daily run, Alter as needed.
$  redo /after="''restart'"/para=("''p1'","''p2'","''p3'") 'f$elem(0,";",f$environment("procedure"))

接下来,作为命令文件的提交者/更换者,您可以决定已安排的下一次运行是使用新版本还是当前版本,而不是通过文件ID而不是其名称。 如果您想立即开始使用新版本,请使用

$ COPY /OVER my-script.com ;-1 /LOG
%COPY-I-OVERLAY, MY-SCRIPT.COM;35 being overwritten
%COPY-S-COPIED, MY-SCRIPT.COM;36 copied to MY-SCRIPT.COM;35 (5 blocks)

干杯, 海因

答案 2 :(得分:0)

你可以提交一件"夹克"除了运行实际程序之外什么都不做的程序。

夹克程序JACKET.COM

 $ SUBMIT/AFTER= [...] JACKET.COM
 $ @REAL_PROCEDURE "''P1'" "''P2'" "''P3'" [...]

JACKET.COM永远不会更新。 当批处理作业执行时,将运行当前版本的REAL_PROCEDURE.COM。