我有.mqh
源代码文件,带有语法错误,例如由以下命令创build:
echo some_error > fail.mqh
现在,我正在使用Metaeditor编译器来检查语法,我的目标是将错误打印到标准输出( CON
),而不是将它们logging到文件( /log:file.log
)中。 请参阅: 编译 。
下面的语法在Linux / macOS上可以正常工作(也在wine cmd.exe
):
$ wine metaeditor.exe /s /log:CON /compile:fail.mqh ??fail.mqh : information: Checking 'fail.mqh' fail.mqh(1,1) : error 116: 'some_error' - declaration without type fail.mqh(1,1) : error 161: 'some_error' - unexpected end of program : information: Result 2 error(s), 0 warning(s)
请注意, /log
参数是必需的,否则编译器默认不会打印任何东西。 所以如果指定了/log
,那么默认情况下它会把编译结果logging到文件中。 而且我正在使用特殊的CON
设备来显示错误。
问题是当我在Windows(cmd)上运行相同的命令,那么我没有输出:
> metaeditor.exe /s /log:CON /compile:fail.mqh
CON:
/ con:
一样。 另外在PowerShell上 。
尽pipeCON
可用于echo
,例如: echo test > CON
。
我可以假设它可能是编译器的一个bug,但是在Wine下它可以正常工作。 为什么这只能在Wine下工作?
有没有另一种方式输出到Windowsterminal屏幕上的错误,而不是日志文件?
注意:您可以从网站安装编译器或下载二进制文件( 32位或64位 )以上进行testing。
澄清:我使用两个单独的命令(编译和打印错误日志之后)的主要障碍是CItesting可能会在打印错误之前失败,这使得testing失效,这是另一个问题的故事。 所以我的目标是检查语法并一次性打印错误。
根据支持团队,MetaEditor应用程序没有控制台,所以它不能输出日志到屏幕上。 所以看起来wine
处理特殊的CON
设备不同。 我已经向服务台报告了这个问题,它仍然是开放的,所以他们可能会在未来实现控制台支持。
目前唯一的解决方法是在编译文件(或在wine
下模拟)后使用type
命令将输出日志文件用于控制台。 即使编译器可以将它显示到控制台,它也不能正确地与CI(在处理错误代码方面)正常工作,因为metaeditor.exe
的返回出口的metaeditor.exe
被完全破坏,因为它返回成功编译的数目文件而不是错误代码(例如,如果你编译20个文件,你会得到20错误代码?!)! 所以依靠metaeditor.exe
返回退出是一个错误,MQL团队不打算修复它,因为他们说这是应该如何工作的意见。