2>&1在shell脚本中的用途是什么

What is the use of 2>&1 in shell scripting

本问题已经有最佳答案,请猛点这里访问。

在shell脚本中,1 is file descriptor for standard output2 is for standard error。既然这两个点都指向控制台,那么2>&1。他们不是已经指向同一个设备了吗?


简短的回答是,您将stderr重定向到stdout,这样既可以收到写入FD2的错误消息,也可以收到写入FD1的正常输出。(fd=文件描述符)。它通常允许您捕获要保存在日志文件等中的错误消息的输出。否则,只需将stdout重定向到日志中,就不会捕获到这些数据。

通过简要的背景介绍,您的shell有3个众所周知的文件描述符,涵盖基本的读写:

0 - stdin (your input buffer)

1 - stdout (your normal output descriptor)

2 - stderr (your normal error descriptor)

当您读或写时,几乎任何编程语言,包括您的shell,都会使用这些常见的文件描述符来管理输入/输出。在shell中,您可以重定向或组合来自stdoutstderr的输出。一般格式为:

1
m > &n    ## where n & m are 1, 2

例如,您可以将stdoutstderr从任意命令合并到一个文件中:

1
./someprogram > myfile 2>&1

它基本上说,"从stdout上的someprogram中获取输出,将其重定向到myfile,而在stdout中包含stderr

有几个很好的参考资料,其中一个是bash编程-介绍如何:所有关于重定向的内容

注意:请确保您还了解,重定向可以临时(按命令)进行,也可以使用exec为脚本的作用域进行设置。