2015-08-20 131 views
-1

在shell脚本中,1 is file descriptor for standard output2 is for standard error。现在,由于这两点都指向了什么是使用 2>&1。他们不是已经指向同一个设备吗?2>&1在shell脚本中的用途是什么

+5

http://stackoverflow.com/questions/818255/in-the-shell-what-does-21-mean?rq=1 –

+1

欢迎来到Stack Exchange,请看看http://stackoverflow.com /帮助/询问并做适当的研究,以便做有用的问题 – Javier

回答

3

简短的回答是要重定向到stderr这样stdout你写FD2以及对FD1正常输出写入FD1两个错误消息。 (FD =文件描述符)。它通常允许您捕获要保存在日志文件中的错误消息的输出等。否则,只有通过将stdout重定向到日志才能捕获这些错误消息。

进行了简短的背景,你的shell有3个,涵盖基本的阅读和写作众所周知的文件描述符:

- 标准输入(在输入缓冲区)

- 标准输出(你的正常输出描述符)

- stderr(你的正常错误描述符)

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

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

您可以组合,例如,无论从任何命令stdoutstderr到一个文件:

./someprogram > myfile 2>&1 

这基本上说,“采取从someprogram输出上stdout重定向到myfile而包括stdoutstderr

有几个很好的参考,一个是BASH Programming - Introduction HOW-TO: All about redirection

注意:请确保您明白重定向可以发生在临时(每个命令的基础上),或者可以使用exec为脚本范围设置。

相关问题