【问题标题】:Ignore tee in linux script忽略linux脚本中的tee
【发布时间】:2018-10-05 11:26:31
【问题描述】:

我在红帽机器上有一个 .sh 脚本:

{
statement 1
statement 2
statement 3
etc....
} 2>&1 | tee "logdir/logfile.log"

同时记录到控制台和日志文件 logfile.com。但是,语句 2 提供了很多输出,我希望将其从日志文件中排除,同时仍然在控制台中显示输出。

有没有办法将 tee 中的特定语句排除到日志文件中?

编辑: 对声明的一点澄清:

{
echo some information on the environment
echo some checks

rsync  -rtpgov /some/folder/ some/other/folder

tar -xf some/other/tar/file.tar  -C some/other/folder2
tar -xf some/other/tar/file.tar  -C some/other/folder3
tar -xf some/other/tar/file.tar  -C some/other/folder4
etc...

echo  some finishing checks
} 2>&1 | tee "logdir/logfile.log"

我希望排除 rsync 写入 logfile.log,同时仍能在控制台中看到输出。

【问题讨论】:

  • 您能否在声明之前显示更多代码?您能否在 if(语句 2)之前添加一个条件,或者这些语句仅存在于您的函数内部?

标签: linux unix command tee


【解决方案1】:

一旦tee 正在处理,你能看到应该排除哪些行吗?

当您只在处理语句 2 时才知道这一点,看起来您需要更改每个语句。

rm "logdir/logfile.log"
{
   echo 1 2>&1 | tee "logdir/logfile.log"
   echo 2 2>&1
   echo 3 2>&1 | tee -a "logdir/logfile.log"
} 2>&1
echo ===
echo "Contents File "logdir/logfile.log"
cat "logdir/logfile.log"

当语句 2 显示不同类型的输出时,您可以专注于该输出

rm "logdir/logfile.log"
{
   echo 1 useful
   echo 2 debug
   echo 3 this I want
} 2>&1 | tee >(grep -Ev "debug|trace|other garbage" > "logdir/logfile.log")
echo ===
echo "File "logdir/logfile.log":"
cat "logdir/logfile.log"

当你不知道语句 2 会说什么,但又想在不改变其他行的情况下过滤这一个,你可以做一个解决方法:

rm "logdir/logfile.log"
{
   echo 1 useful
   echo 2 debug | sed 's/^/FREEZE/'
   echo 3 this I want
} 2>&1 | tee >(grep "^FREEZE" > "logdir/logfile.log") | sed 's/^FREEZE//'
echo ===
echo "File "logdir/logfile.log":"
cat "logdir/logfile.log"

【讨论】:

    【解决方案2】:

    我自己找到了一个简单可行的解决方案:

    {
    echo some information on the environment
    echo some checks
    # etc....
    } 2>&1 | tee "logdir/logfile.log"    
    
    {
    rsync  -rtpgov /some/folder/ some/other/folder
    } 2>&1 | tee "logdir/rsync.log"
    
    {
    tar -xf some/other/tar/file.tar  -C some/other/folder2
    tar -xf some/other/tar/file.tar  -C some/other/folder3
    tar -xf some/other/tar/file.tar  -C some/other/folder4
    # etc...
    
    echo  some finishing checks
    } 2>&1 | tee -a "logdir/logfile.log"
    

    由于要记录的语句数量相对较大,并且日志文件的输入变化很大,因此将 logflie 拆分为 2 似乎更方便。 使用 -a 选项,日志行将附加到日志文件中

    【讨论】:

      猜你喜欢
      • 2016-12-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-29
      • 2018-03-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多