【问题标题】:Tee command unix三通命令 unix
【发布时间】:2012-08-29 16:12:34
【问题描述】:

我怎样才能将所有这些服务放入一个日志文件:

stop service 1
stop service 2
stop service 3

我希望将所有这些服务日志放到一个文件中

我应该使用:

stop service 1 | tee log1.log
stop service 2 | tee log1.log
stop service 3 | tee log1.log

或者:

stop service 1 
stop service 2 
stop service 3 | tee log1.log

我还没有找到这样的问题 谢谢!

【问题讨论】:

    标签: linux bash unix ssh tee


    【解决方案1】:

    tee 接受 -a 标志以附加到文件。因此,您应该能够通过执行以下命令将所有三个命令的输出重定向到单个文件:

    stop service 1 | tee log1.log
    stop service 2 | tee -a log1.log
    stop service 3 | tee -a log1.log
    

    (第一个命令将截断任何现有文件)

    【讨论】:

    • 我有这个问题要问你!如果标准输出对于 tee 来说太大了怎么办?它的行为如何!它是一次性解析所有标准输出还是按块解析?
    • @Shantesh:你是什么意思?它的行为就像任何其他通过管道接收输入的命令一样。操作系统会做所有的缓冲和阻塞。
    • 我其实有些疑惑,非常需要帮助stackoverflow.com/questions/34657613/…
    【解决方案2】:

    另一种不使用tee 的方法是简单地使用一个bash 命令组,将stdout 单个重定向到日志文件:

    { stop service 1; stop service 2; stop service 3 } > log1.log
    

    使用>> 运算符附加到日志文件,或使用&>> 运算符附加stdoutstderr。也可以使用 bash 子shell:

    ( stop service 1; stop service 2; stop service 3 ) > log1.log
    

    【讨论】:

    • 或者一个简单的命令组{ a; b; c; } >> log1.log,它不需要子shell来执行。此外,&>> 会将标准错误和标准输出都放在日志文件中,这可能不是我们想要的。使用>> 仅获取标准输出。 > 可能就足够了,因为我们一次性将组合输出流重定向到单个文件。
    • 非常感谢大家,但我需要使用 tee 功能不仅可以将日志复制到文件,还可以查看它,因为我使用的是一个名为 TWS 的工具,并且日志必须出现在屏幕上。
    【解决方案3】:
    {
    stop service 1
    stop service 2
    stop service 3
    } 2>&1 | tee log1.log
    

    这将使用单个重定向操作处理所有三个命令的输出。它还包括日志文件中的错误。

    【讨论】:

      猜你喜欢
      • 2011-11-01
      • 1970-01-01
      • 2012-04-21
      • 2014-01-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多