流重定向顺序和os执行的细节

时间:2013-10-24 13:39:18

标签: linux bash

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

另一个问题是为什么在第一个脚本中流的序列是不正确的。我的意思是第一行文件包含stderr而第二行包含stdout。 我需要一些关于在这些流的背景中真正做了些什么的帮助。我的意思是操作系统真正执行的操作。(指针,内存等)。

2 个答案:

答案 0 :(得分:2)

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

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

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

在第二种情况下

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

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

答案 1 :(得分:0)

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

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

将stdout重定向到dumpz文件,然后将stderr重定向到重定向stdout的位置。

但是这个命令:

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

首先将stderr重定向到重定向stdout(tty或terminal)的位置,然后将stdout重定向到dumpz文件。