第四章 使用$ZF(-100)运行程序或系统命令 - 记录命令和重定向输出

2023-12-25 09:32:31

第四章 使用$ZF(-100)运行程序或系统命令 - 记录命令和重定向输出

记录命令和重定向输出

以下关键字控制日志记录和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.txttail命令接受输入并显示最后两行:

   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

文章来源:https://blog.csdn.net/yaoxin521123/article/details/135190545
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。