2>&1
>
”的文件重定向和使用“|
”处理重定向我一直想知道的是关于上述两个的组合
如果要将 prog1 的STDERR和STDOUT重定向到 prog2 ,请将2>&1
放在|prog2
管道之前。另一方面,如果您将prog1的STDERR和STDOUT重定向到文件(file.txt),则2>&1
会在> file.txt
之后。
所以我知道怎么做,我只是想知道为什么这样做。对我来说似乎不一致,但我可能会以错误的方式看待它
由于
答案 0 :(得分:5)
按顺序处理它们。
所以,如果你这样做
progname 2>&1 1>out.txt
将stderr 从程序转移到程序stdout的当前目标,这是shell的stdout流 ,并转移程序的标准输出到out.txt。
如果你这样做
progname 1>out.txt 2>&1
将程序的标准输出转移到out.txt,然后将stderr 从程序转移到程序标准输出的当前目标,即out.txt
答案 1 :(得分:1)
如果您不将管道视为重定向,则会有所帮助。使用2>&1
,您将stderr重定向到stdout。只有stdout通过管道。如果你在管道之前重定向stdout,那么没有任何东西可以通过。