【问题标题】:How to redirect both stdout and stderr to a file [duplicate]如何将stdout和stderr都重定向到文件[重复]
【发布时间】:2011-11-23 12:39:20
【问题描述】:

我正在运行一个 bash 脚本,该脚本会为执行命令创建一个日志文件

我使用以下

Command1 >> log_file
Command2 >> log_file

这只会发送标准输出,而不是终端上出现的标准错误。

【问题讨论】:

    标签: bash stdout io-redirection stderr


    【解决方案1】:

    如果你想登录到同一个文件:

    command1 >> log_file 2>&1
    

    如果你想要不同的文件:

    command1 >> log_file 2>> err_file
    

    【讨论】:

    • 为了避免其他人感到沮丧,请注意顺序很重要:2>&1 需要出现在>> log_file 之后。
    • 为什么是>> 而不是>
    • >> 附加到文件,> 覆盖。搜索“shell重定向”了解更多详情。
    • 查看而不是保存 log_file 的变体,例如当make 吐出一万个滚出屏幕的错误时:vi <(make 2>&1).
    • 并查看输出,同时将其保存到文件中:command 2>&1 | tee log_file
    【解决方案2】:

    重定向两者的最简单语法是:

    command &> logfile
    

    如果你想追加到文件而不是覆盖:

    command &>> logfile
    

    【讨论】:

    • 不确定何时添加此运算符,但它可能在旧版本的 Bash 中不可用。它似乎在我运行 Gnu bash v3.2.48 的机器上运行。
    • @CostiCiudatu &>> 运算符似乎在 Mac OS X 中不起作用;使用 Mat 的解决方案更安全。
    • @JamesFennell 你是对的,我没有意识到这一点。我赞成接受的答案:)
    • &> 现在可以在 OS X 10.11.1(似乎是 bash 3.2)上按预期工作,仅供记录。
    • tldp.org/LDP/abs/html/io-redirection.html 提到此语法“从 Bash 4 最终版本开始”具有功能。
    【解决方案3】:

    你可以这样做 2>&1:

     command > file 2>&1
    

    【讨论】:

    • +1, 2>&1 将文件描述符 2 (stderr) 重定向到文件描述符 1 (stdout)
    • 这里为什么需要一个 & 符号?即为什么是 2>&1 而不是 2>1?
    • @btomtom5 & 表示文件描述符。否则如何写入名为1 的文件?
    【解决方案4】:

    用途:

    command >>log_file 2>>log_file
    

    【讨论】:

      【解决方案5】:

      请使用command 2>file 这里2代表stderr的文件描述符。您也可以使用 1 代替 2 以便 stdout 被重定向到“文件”

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-02
        • 2012-08-07
        • 1970-01-01
        • 2011-12-28
        相关资源
        最近更新 更多