【发布时间】:2017-05-25 15:44:19
【问题描述】:
我的.mqh 源代码文件有语法错误,例如由以下命令创建:
echo some_error > fail.mqh
现在,我使用 Metaeditor 编译器检查语法,我的目标是将错误打印到标准输出 (CON),而不是将它们记录到文件 (/log:file.log)。见:Compiling。
以下语法在 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,则默认情况下会将编译结果记录到文件中。我正在使用特殊的CON 设备来显示错误。
问题是当我在 Windows (cmd) 上运行相同的命令时,我没有输出:
> metaeditor.exe /s /log:CON /compile:fail.mqh
CON:/con: 也一样。也在 PowerShell 上。
虽然CON 适用于echo,例如:echo test > CON。
我可以假设它可能是编译器的错误,但是在 Wine 下它可以正常工作。为什么这只能在 Wine 下工作?
是否有另一种方法可以将错误输出到 Windows 上的终端屏幕,而不是日志文件?
注意:您可以install compiler from the site 或下载二进制文件(32bit 或64bit)进行上述测试。
澄清:我使用两个单独的命令(之后编译并打印错误日志)的主要障碍是CI test 在打印错误之前可能会失败,这使得测试毫无用处,这是另一个问题的故事。所以我的目标是一次性检查语法并打印错误。
【问题讨论】:
-
我会省略参数
/log:CON并最终添加错误输出重定向 `2>&1' -
但是默认情况下编译器不会在输出中打印任何内容,除非指定了
/log,所以它默认将编译结果记录到文件中。 -
看起来 metaeditor 在这些环境中的行为/交互方式不同。试试
/log:con:怎么样 -
刚刚测试过,同样的。
-
metaeditor命令完成后为什么不直接输出日志文件?
标签: windows powershell command-line compilation mql