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

发布于 2024-12-12 03:47:07 字数 419 浏览 0 评论 0原文

每当我在 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

The error message always gets printed to the terminal whenever I get an error in bash shell (e.g. poor syntax)

$ 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"

So what is the purpose of redirecting stderr to stdout if stderr gets printed to terminal by default?

$ command-name 2>&1

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

天涯沦落人 2024-12-19 03:47:07

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

如果你想摆脱 stderr 输出,请将其重定向到 void:

$ command-name 2> /dev/null

By default, both stdout and stderr are directed to the terminal. If you redirect stderr to stdout, then it also goes to the terminal.

If you want to get rid of the stderr output, redirect it to the void:

$ command-name 2> /dev/null
金橙橙 2024-12-19 03:47:07

请注意,默认情况下,stdout 会打印到终端。通过执行 command-name 2>&1 ,您实际上将 stderr 重定向到同一位置。

重定向的顺序也很重要。

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

Note that stdout gets printed to the terminal by default. and by doing command-name 2>&1 you are essentially redirecting stderr to the same place.

Also order of redirection matters.

So what you are looking for is , command-name >file_for_stdout 2>&1

未蓝澄海的烟 2024-12-19 03:47:07

stderrstdout 默认情况下都显示在控制终端上。如果像之前那样对它们进行多路复用,则它们都将输出到任何 stdout 输出上。然后,您可以将 stdout 重定向到文件以在单个文件中获取输出和错误。

$ command >log 2>&1 

会将错误和输出放入名为“log.log”的文件中。

stderr and stdout are by default both displayed on the controlling terminal. If you multiplex them as you've done, they will both be output on the whatever stdout outputs to. You can then redirect stdout to a file to get output and errors in a single file.

$ command >log 2>&1 

will put both errors and output into the file called `log.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文