首先关于顺序
以下工作将重定向到stdout
和。strerr
nul
command 1>nul 2>&1
以下不
command 2>&1 1>nul
为什么顺序很重要?如何用人类可以理解的语言来阅读这些表达?
关于位置
这有效
command 1>nul 2>&1
这也是
1>nul 2>&1 command
为什么?任何有关语法规则的官方参考文档都将有所帮助。
command 2>&1 1>nul
不起作用是不正确的。有用。但是像往常一样,它会执行您所要的而不是您想要的
从左到右:
2>&1
流2(stderr)的数据将发送到流1(stdout)使用的句柄的副本/副本。
1>nul
流1的数据将发送到nul
。
该副本是关键。数据不发送到任何流1指向的位置,而是发送到流句柄的副本。重定向流1时,流2具有自己的句柄,即先前流1的副本。更改流1不会影响流2。
现在,让我们从左到右查看工作代码
1>nul
将流1中的句柄设置为指向nul
2>&1
将流2中的句柄设置为流1中正在使用的句柄的副本,即 nul
关于位置
在大多数情况下,位置(命令之前,命令之后或两者均无关)是不相关的。要执行命令,解析器必须首先准备该命令将使用的流。如果rem
在开始执行命令之前认为有必要(尝试重定向命令输入或输出),则可以进行此准备。
唯一有区别的情况是,我们想从命令中获取的内容与解析器了解的内容不同。一种明显的情况是,当我们需要输出带有结尾数字的字符串时。编码为
echo 1 2 3>file
不会将完整的字符串发送到目标文件。1 2
将回显到控制台,并将写入流3的数据(此命令中的任何内容)都发送到file
当然,可以在数据的末尾(3
和之间>
)添加一个空格,但是该空格将包含在输出中。如果这是不可接受的,解决方案是将重定向放置在命令的开头
>file echo 1 2 3
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句