将stderr重定向到stdout $ command-name 2>& 1默认情况下stderr不会打印到终端吗?

时间:2011-10-26 10:27:21

标签: linux bash

每当我在bash shell中出现错误时,错误消息总会被打印到终端(例如语法不佳)

$ totem Desktop/songs/song1.mp3
** Message: Error: Resource not found.
gstfilesrc.c(1055): gst_file_src_start (): /GstPlayBin2:play/GstURIDecodeBin:uridecodebin0/GstFileSrc:source:
No such file "/home/me/Desktop/songs/song1.mp3"

那么如果stderr默认打印到终端,那么将stderr重定向到stdout的目的是什么?

$ command-name 2>&1

3 个答案:

答案 0 :(得分:3)

默认情况下,stdoutstderr都会定向到终端。如果您将stderr重定向到stdout,那么它也会转到终端。

如果要删除stderr输出,请将其重定向到void:

$ command-name 2> /dev/null

答案 1 :(得分:2)

请注意,stdout默认打印到终端。通过command-name 2>&1,你基本上将stderr重定向到同一个地方。

重定向的顺序也很重要。

所以你要找的是command-name >file_for_stdout 2>&1

答案 2 :(得分:1)

默认情况下,

stderrstdout都显示在控制终端上。如果你像你一样多路复用它们,它们都将输出到stdout输出到的任何地方。然后,您可以将stdout重定向到文件以在单个文件中获取输出和错误。

$ command >log 2>&1 

将错误和输出都放入名为`log的文件中。