以下关键字控制日志记录和I/O
重定向:
/LOGCMD
-将程序命令和参数发送到消息日志。/STDIN
、/STDOUT
和/STDERR
-用于重定向被调用程序的标准输入、标准输出和标准错误。这些关键字必须后跟一个文件规范。/LOGCMD
关键字会将命令参数和退出状态码记录在消息日志(<install-dir>\mgr\messages.log
)中。这主要是作为一个调试工具,允许查看传递给$ZF(-100)
的表达式是如何实际求值的。
在大多数情况下,命令及其参数记录在一行,返回值记录在下一行。例如,set status=$ZF(-100,"/LOGCMD","echo","hello","world")
在Windows
下产生如下日志条目:
03/28/18-11:49:51:898 (26171) 0 $ZF(-100) cmd=echo "hello" "world"
03/28/18-11:49:51:905 (26171) 0 $ZF(-100) ret=0
但是,在UNIX
上,当没有指定/SHELL
时,每一行记录一个值:
03/28/18-12:09:22:243 (26171) 0 $ZF(-100) argv[0]=echo
03/28/18-12:09:22:500 (26171) 0 $ZF(-100) argv[1]=hello
03/28/18-12:09:22:559 (26171) 0 $ZF(-100) argv[2]=world
03/28/18-12:09:22:963 (26171) 0 $ZF(-100) ret=0
在任何一种情况下,参数都将在程序接收到它们时准确地记录下来。
I/O
重定向以下关键字和文件指定符控制I/O
重定向:
/STDIN=input-file
/STDOUT=output-file
or /STDOUT+=output-file
/STDERR=error-file
or /STDERR+=error-file
I/O
重定向关键字后跟一个操作符(=
或+=
)和一个文件名或文件路径。操作符周围允许有空格。标准输入应该指向一个现有的文件。如果标准输出和标准错误文件不存在,则创建它们;如果已经存在,则截断它们。使用=操作符创建或截断文件,或使用+=操作符追加到现有文件。要使标准错误和标准输出转到同一文件,请为这两个关键字指定相同的文件。
在下面的示例中,第一行将echo
命令的标准输出重定向到文件temp.txt
。,第二行显示结果文件内容:
USER>set status = $ZF(-100,"/STDOUT=""temp.txt""","echo","-e","three\ntwo\none\nblastoff")
USER>set status = $ZF(-100,"","cat","temp.txt")
three
two
one
blastoff
在下一个示例中,通过将文件重定向到标准输入,我们以不同的方式显示两行temp.txt
。tail
命令接受输入并显示最后两行:
USER>set status=$ZF(-100,"/STDIN=""temp.txt""","tail","-n2")
one
blastoff
最后一个示例将标准错误重定向到temp.txt
,并尝试显示一个不存在的文件。它还使用/ASYNC
关键字异步运行命令,导致在显示错误消息之前返回$ZF(-100)
调用。第二行(与前面的示例相同)再次显示文件的最后两行,其中现在包含重定向的错误消息:
USER>set status = $ZF(-100,"/ASYNC /STDERR+=""temp.txt""","cat","nosuch.file")
USER>set status=$ZF(-100,"/STDIN=""temp.txt""","tail","-n2")
blastoff
cat: nosuch.file: No such file or directory