在shell脚本中使用2>& 1有什么用处

时间:2015-08-20 07:43:52

标签: shell scripting

在shell脚本中,1 is file descriptor for standard output2 is for standard error。现在,因为这两个指向控制台的用途是什么 2>&1。他们不是已经指向同一台设备吗?

1 个答案:

答案 0 :(得分:3)

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

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

  

0 - stdin(您的输入缓冲区)

     

1 - stdout(您的正常输出描述符)

     

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

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

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

例如,您可以将任何命令中的stdoutstderr组合到一个文件中:

./someprogram > myfile 2>&1

基本上说,“将someprogram上的stdout的输出重定向到myfile,同时将stderr包含在stdout中。

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

注意:请确保您也了解重定向可以在临时(基于每个命令)发生,也可以使用exec为脚本范围设置。