2

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

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

4

2 回答 2

2

重定向的应用按照您指定的顺序发生,所以在第一种情况下

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

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

在第二种情况下

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

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

于 2013-10-24T13:44:37.187 回答
0

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

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

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

但是这个命令:

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

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

于 2013-10-24T13:44:45.653 回答