tee命令不起作用

时间:2013-12-26 11:26:59

标签: bash shell tee

我正在运行一个脚本,它使用tee命令将输出记录到屏幕,也记录到文件。脚本如下:

Script.sh:
count=1
while [ $count -le 10 ]
do
  echo "`date` : Function call, loopcount - $count" | tee -a logfile.log
  functioncall
  count=$( $count + 1 )
done

fucntioncall()函数在同一个脚本中定义。

functioncall(){

<some processing>
cd $Location
<some processing>
}

当我运行Script.sh时,此脚本成功运行,但在第一次运行时只在logfile.log中生成一个条目,而在输出屏幕中,我可以看到循环运行了10次并且正确loopcount递增并显示,但logfile.log中的条目未完成。

当我在脚本中对行cd $Location进行注释时,它的行为符合要求,意味着O / P和logfile.log都显示正确的循环次数。

知道为什么会出现这种未定义的行为?非常感谢任何修复/解决方法!

1 个答案:

答案 0 :(得分:1)

更改目录时,会更改。这意味着tee将写入新文件。

可能的解决方案:

  • 而不是tee -a logfile.log使用tee -a <absolute_path_to_current_directory>/logfile.log
  • 将整个tee移到循环之外:

    while
    do
        stuff
    done | tee logfile.log # bonus - you don't need -a here
    
  • cd之后返回初始位置。哪个应该与pushdpopd

  • 实际完成
  • 不要在主shell中执行cd。在子shell中进行所有处理:

    (cd $location;
        <some processing>)
    

我自己更喜欢最后一个。

另一方面(可能更好) - 重写处理以避免cd