【问题标题】:What is the use of 2>&1 in shell scripting [duplicate]2>&1在shell脚本中有什么用[重复]
【发布时间】:2015-11-13 17:56:58
【问题描述】:

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

【问题讨论】:

标签: shell scripting


【解决方案1】:

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

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

0 - 标准输入(您的输入缓冲区)

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

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

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

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

例如,您可以将任意命令中的stdout 和stderr 组合到一个文件中:

./someprogram > myfile 2>&1

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

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

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

【讨论】:

    猜你喜欢
    • 2015-05-29
    • 2017-08-15
    • 2012-03-09
    • 2021-12-02
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 2018-05-05
    • 2013-04-08
    相关资源
    最近更新 更多