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

70 浏览
0 Comments

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

这个问题已经有了答案:“2>&1”是什么意思?

在shell脚本中,1是标准输出文件描述符2是标准错误输出。现在,既然它们都指向控制台,那么2>&1有什么用呢?它们不是已经指向同一个设备了吗?

admin 更改状态以发布 2023年5月23日
0
0 Comments

简短的回答是你正在将stderr重定向到stdout,因此你会得到错误信息和正常输出在FD1上写入FD2。 (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

它基本上表示“将someprogramstdout的输出重定向到myfile,同时包括stderrstdout中。

有几个好的参考资料,其中之一是BASH编程-红色指南

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

0