如果打开命令提示符并输入:
echo foobar > nul
它不会打印任何内容,因为nul
吞下了它的所有输入。但是如果你使用PowerShell运行命令:
powershell "echo foobar" > nul
它会将foobar
输出到控制台。为什么这样,我该怎么做才能解决它?
修改 Here是$PSVersionTable
的输出。看起来我正在使用PowerShell v5.0。
答案 0 :(得分:5)
注意:我假设您从 cmd.exe 调用命令,而不是从PowerShell中调用命令,这与症状I' m一致看到。 功能
您在PS(PowerShell)v5 中偶然发现错误(在v3中没有出现;对此问题的评论表明它也是虽然我不完全理解为什么 PS 应该受到责备,因为我不希望cmd.exe
处理重定向。
但是,我可能会遗漏一些东西,所以请告诉我。
PowerShell 应该发送其所谓的成功流 - 默认输出的内容,包括echo
,这是Write-Output
的别名 - 外部世界&#39 ; s stdout 。
在较旧的PS版本>NUL
中,有效地抑制了PowerShell的输出
奇怪的是,v5中的错误仅影响NUL
,而重定向到实际文件则有效。
至于变通办法:
如果您的代码兼容v2 ,请尝试以下操作:
powershell -version 2 "echo foobar" > NUL
否则,会重定向到实际文件并在之后删除该文件:
powershell "echo foobar" > "%TEMP%\NUL-bug-workaround" & del "%TEMP%\NUL-bug-workaround"