streamredirect的顺序和操作系统的细节

这两个bash命令有什么区别:1. printf“somthing wrong!%v”哎呀! > dumpz 2>&1 2. printf“somthing wrong!%v”哎呀! 2>&1> dumpz当我使用第一个脚本时,两个stream都保存在文件(dumpz)中。 当我使用第二个脚本时,只有stdout进入文件,stderr显示在terminal中。

另一个问题是为什么在第一个脚本stream的顺序是不正确的。我的意思是第一行文件包含标准错误,第二行包含标准输出。 我需要一些关于这个stream的背景知识。 我的意思是什么操作系统真正执行(指针,内存等)。

顺序在这些重定向中非常重要。

printf "somthing wrong!%v" Oops! > dumpz 2>&1 

会将stdout重定向到dumpz文件,然后将stderr重定向到stdout被重定向到的任何地方。

但是这个命令:

 printf "somthing wrong!%v" Oops! 2>&1 > dumpz 

将首先将stderr重定向到stdout重定向到的任何地方(tty或终端),然后将stdout重定向到dumpz文件。

重定向的应用按照您指定的顺序进行,因此在第一种情况下

 printf "somthing wrong!%v" Oops! > dumpz 2>&1 

它首先将stdout重定向到文件,然后将stderr重定向到stdout指向的任何文件。

在第二种情况下

 printf "somthing wrong!%v" Oops! 2>&1 > dumpz 

它首先将stderr重定向到stdout指向的目前(当前是终端)。 然后它将stdout重定向到文件。