编译器在Wine下输出错误,但不在Windows上输出

我有.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团队不打算修复它,因为他们说这是应该如何工作的意见。