【问题标题】:Command output redirect to file and terminal [duplicate]命令输出重定向到文件和终端[重复]
【发布时间】:2012-11-15 11:53:35
【问题描述】:

我也试图将命令输出扔到文件和控制台。这是因为我想在文件中记录输出。我正在执行以下操作,它附加到文件但不在终端上打印ls 输出。

$ls 2>&1 > /tmp/ls.txt

【问题讨论】:

    标签: linux bash redirect


    【解决方案1】:

    值得一提的是,2>&1 表示标准错误也将与标准输出一起被重定向。所以

    someCommand | tee someFile
    

    只给你文件中的标准输出,而不是标准错误:标准错误只会出现在控制台中。要在文件中也获得标准错误,您可以使用

    someCommand 2>&1 | tee someFile
    

    (来源:In the shell, what is " 2>&1 "?)。最后,上述两个命令都会截断文件并开始清除。如果您使用一系列命令,您可能希望一个接一个地获取所有命令的输出和错误。在这种情况下,您可以使用 -a 标志来“tee”命令:

    someCommand 2>&1 | tee -a someFile
    

    【讨论】:

      【解决方案2】:

      如果有人需要附加输出而不是覆盖,可以使用“tee”命令的“-a”或“--append”选项:

      ls 2>&1 | tee -a /tmp/ls.txt
      ls 2>&1 | tee --append /tmp/ls.txt
      

      【讨论】:

        【解决方案3】:

        是的,如果您重定向输出,它不会出现在控制台上。使用tee

        ls 2>&1 | tee /tmp/ls.txt
        

        【讨论】:

        • 在这种情况下,错误被合并到输出中(2>&1),因此下一个使用管道的进程会将它们都视为常规输入(简而言之:是)。
        • 如何使用 tee 追加日志?
        • 没关系我找到了 --append, -a
        • 如何在上述命令中给出 ls.txt 文件的大小,使其不超过给定的大小。一旦超过最大大小,如何在同一个目录中创建一个新文件(例如:ls1.txt,ls2.txt...)
        • 请注意,您将失去ls 的退出状态。如果您想保留ls 的退出状态,或者更准确地说,想弄清楚尽管tee 是您管道中的最后一个(并且很可能是成功的)命令,但您的管道中的某些内容是否失败,您需要使用@987654327 @.
        猜你喜欢
        • 1970-01-01
        • 2017-12-01
        • 2014-10-11
        • 2018-12-09
        • 2020-10-14
        • 2017-04-24
        • 2017-03-14
        • 2018-06-07
        • 1970-01-01
        相关资源
        最近更新 更多