批处理脚本中的非标准文件描述符



所以我有一个有趣的问题(我认为是什么)。

在工作中,我测试/配置我们使用专有命令行实用程序制作的以太网设备。

基本上,你打开一个命令提示符,在适当的目录中键入ethutil,然后它通过JTAG访问芯片。

在此实用程序中,您可以运行"脚本",这些脚本只是填充了适当命令的文本文件。 它们运行方式如下:

-->run test_script.txt

然后,这将吐出对脚本中所有命令的反馈。

我已经通过使用批处理文件将命令管道到实用程序来自动化大量寄存器写入/读取,如下所示:

type run test_script.txt | ethutil >nul

nul只是为了抑制我的批量读数中的所有输出。 这效果很好,但我总是收到一个错误,说找不到该文件:

The system cannot find the file specified.
Error occurred while processing: run.
test_script.txt

在继续之前,应该注意的是,如果我只是从实用程序本身(即没有批处理脚本)运行脚本,则不会发生此错误。

现在我尝试像这样抑制错误:

type run test_script.txt | ethutil >nul 2>&1

但是错误仍然会出现,所以它显然不是stderr的一部分。

此外,如果我将nul替换为日志文件,则错误不会显示在日志文件中。

所以我的问题是:有没有办法弄清楚为什么当我运行批处理脚本时会出现此错误? 如果它不是stderrstdout的一部分,它是什么? 甚至有可能知道它是什么的一部分吗?

提前谢谢。

附言我知道这可能只是专有软件的一个怪癖,但我想我会问它是否与 Windows 有关。

>type不是echo

c:> type /?
displays the contents of a text file or text files

它抱怨是因为run不是文本文件,并且(大概)可以读取test_script.txt因为它是。

该错误来自"type"的stderr,因此重定向ethutil的stderr不会阻止它。如果你真的想,你可以type run 2>nul | ethutil但由于没有run文件,它无法正常工作/做你期望的事情,你应该修复它。

最新更新