Windows 将stdin复制到stdout的命令
我正在更新Crystal编程语言标准库的测试套件,以在Windows上运行。为了测试在unix上使用stdout和stdin管道生成的新进程,Windows 将stdin复制到stdout的命令,windows,cmd,Windows,Cmd,我正在更新Crystal编程语言标准库的测试套件,以在Windows上运行。为了测试在unix上使用stdout和stdin管道生成的新进程,cat用作将stdin复制到stdout进行测试的“虚拟进程” 使用cmd.exe命令在windows上实现相同效果的最简单命令是什么?可以在所有windows版本中找到的一个简单命令,可以在指定场景中用作linuxcat命令的替代品: find /v "" 按原样,它将从标准输入读取行,并将它们写入标准输出 注意:虽然有时可以使用more和findst
cat
用作将stdin复制到stdout进行测试的“虚拟进程”
使用
cmd.exe
命令在windows上实现相同效果的最简单命令是什么?可以在所有windows版本中找到的一个简单命令,可以在指定场景中用作linuxcat
命令的替代品:
find /v ""
按原样,它将从标准输入读取行,并将它们写入标准输出
注意:虽然有时可以使用more
和findstr“^”
,但两者都有一些限制,使find/v“
成为更好的选择。以下是我的解决方案:
powershell.exe -c "[Console]::OpenStandardInput().CopyTo([Console]::OpenStandardOutput())"
使用(find/v”“
)的公认解决方案存在一些问题:
- 它会破坏二进制数据。它尝试将输入读取为带有CRLF行结尾的文本。如果您向它传递不包含换行符的数据,它将在末尾输出一个CRLF。如果有一行长度超过其行限制(4091个字符),它也会失败
- 当给定空输入时,它返回一个退出代码1。相反,当输入为空时,Unix
将返回0的退出代码。当输入为空时,测试退出代码并期望其为零的测试将失败。一种解决方法是执行cat
(假设您是从find/v”“&:
运行它,例如使用cmd.exe
)–但是,如果find由于任何原因实际无法运行(请参阅下一个要点),您将不会收到故障退出代码来通知您cmd.exe/c
- 在某些系统上,在Windows
之前的路径中可能有MSYS/Cygwin/etcfind
。(当然,在这种情况下,您的路径中可能也有find
,因此根本不需要执行此操作–但是,您可能正在寻找一种解决方案,即使在未安装MSYS/Cygwin/etc的系统上也能工作。)假设您使用cat
,您可以使用cmd.exe/c
%windir%\system32\find.exe/v”“
我认为这个PowerShell oneliner更好,因为它避免了上述问题。您可以尝试使用
find/v”“
,或者,如果您的测试发送的行数不超过65535行,并且进程的标准输出也被重定向(而不是控制台),您可以简单地使用more
@MCNDfind/v”“
,对我来说效果很好,你能把这个作为答复吗?