[我在使用此命令时正在玩wmic
wmic<nul 3>nul
产生此:
奇怪的是,any命令将起作用,但只有流3会导致输出泛洪。我在SO“ cmd输出洪水”中进行了搜索和搜索,找不到任何重复项或任何结果。问题:为什么只有流3有效?
cmd
中的代码将尝试避免将原始句柄保存到要重定向的流中的问题,以便可以还原重定向过程。但是使用的功能(标准_dup()
)的工作方式以及创建重定向时所使用的顺序可能会更改内部结构,从而最终使反向代码转换使用错误的信息。
<nul 3<nul wmic
[<nul
将stdin
句柄保存在&3
中,并将nul
流分配给&0
3<nul
将&3
中的句柄保存到&4
并将nul
流分配给&3
wmic
被执行。当它从nul
(分配给&0
)读取时,它无法读取任何内容并结束。&0
从保存它的&3
恢复,但是现在&3
指向nul
&3
从&4
恢复。现在它指向原始的stdin
< file1 3< file2 echo/
重定向取消过程使stdin
流指向磁盘文件。 cmd
开始读取此文件以执行命令(通常从stdin
开始执行),并且在文件末尾,读取操作失败,cmd
实例结束。如果您想用复杂的方式启动记事本,可以尝试]
( >file1 echo notepad ) & ( <nul 3<file1 break )
但是在这个问题上,行为是不同的,因为分配给&3
的流将在重定向重定向后复制到stdin
,不是磁盘文件,而是nul
<nul 3<nul echo/
一旦执行命令并还原重定向,stdin
流将与nul
设备关联
cmd
显示提示并尝试从nul
中读取新的命令cmd
不执行任何操作1>file1 <nul 4<nul echo/
并使用不同的流获得相同的结果。或者你可以做
3<nul <nul echo/
并且它将起作用(就其意义而言)。
请求流重定向的顺序,cmd
内部代码如何处理流以及是否存在仍在活动的先前重定向确定了命令的成功或失败。