这两个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重定向到文件。