如何屏蔽OpenVMS Fortran编译器的错误提示信息?
解决OpenVMS V9.2.2中Fortran编译器错误信息屏蔽问题
你遇到的问题根源在于:OpenVMS Fortran编译器的诊断信息并不一定都输出到SYS$ERROR,很多时候会直接发送到SYS$OUTPUT,甚至直接绑定终端设备(TT:),所以单独定义SYS$ERROR为NL:无法完全屏蔽错误输出。以下是几种可靠的解决方法:
方法1:命令行直接重定向输出
在编译命令中同时重定向SYS$OUTPUT和SYS$ERROR到空设备NL:,这是最直接的方式:
$ FORTRAN/NOLOG your_file.f > NL: 2> NL:
> NL:重定向标准输出(SYS$OUTPUT)到空设备2> NL:重定向标准错误(SYS$ERROR)到空设备/NOLOG选项会抑制编译器的正常日志信息,只保留错误/警告,再结合重定向就能完全屏蔽所有输出
方法2:定义多个相关逻辑名
如果需要在会话中持续屏蔽输出,可以同时定义多个编译器可能用到的逻辑名,覆盖用户作用域:
$ DEFINE/USER SYS$ERROR NL: $ DEFINE/USER SYS$OUTPUT NL: $ DEFINE/USER SYS$MESSAGE NL: $ FORTRAN/NOLOG your_file.f
部分编译器会使用SYS$MESSAGE输出诊断信息,所以一并定义能覆盖更多场景。
方法3:通过批处理作业执行编译
如果是批量编译任务,可以提交批处理作业并指定输出到空设备,避免占用终端:
$ SUBMIT/NOLOG/OUTPUT=NL: compile_script.com
其中compile_script.com是包含编译命令的DCL脚本文件,/NOLOG会抑制批处理的日志记录,/OUTPUT=NL:直接丢弃所有作业输出。
补充说明
- 部分编译器提供抑制警告的选项(如
/NOWARNINGS),但这类选项通常不会屏蔽错误信息,仅适用于减少非关键输出。 - 避免全局定义
SYS$ERROR或SYS$OUTPUT到NL:,这会导致后续所有命令的输出都被丢弃,影响正常操作,使用/USER作用域仅对当前用户会话生效。
内容的提问来源于stack exchange,提问作者CW Holeman II
相关产品推荐
相关产品推荐

