在shell脚本中使用2>&1有什么用处
这个问题在这里已经有了答案:
简短的回答是,您将stderr
重定向到stdout
以便您将写入FD2
错误消息以及FD1
上的正常输出写入FD1
。 (FD =文件描述符)。 它通常允许您捕获想要保存在日志文件中的错误消息的输出等。否则,仅通过将stdout
重定向到日志就不能捕获这些错误消息。
通过简短的背景介绍,您的shell有3个众所周知的文件描述符,涵盖基本的读写操作:
0 - stdin(你的输入缓冲区)
1 - stdout(你的普通输出描述符)
2 - stderr(你的正常错误描述符)
当你读或写时,几乎所有的编程语言,包括你的shell,都使用这些通用的文件描述符来管理输入/输出。 在你的shell中,你可以重定向或合并stdout
和stderr
。 一般格式是:
m > &n ## where n & m are 1, 2
例如,可以将任何命令的stdout
和stderr
与文件结合使用:
./someprogram > myfile 2>&1
基本上说,“从stdout
someprogram
的stdout
重定向到myfile
而在stdout
包含stderr
。
有几个很好的参考,一个是BASH编程 - 介绍如何:所有关于重定向
注意:确保您也了解重定向可以发生在临时(每个命令的基础上),或者可以使用exec
为脚本的范围进行设置。