我正在运行一个脚本,它使用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都显示正确的循环次数。
知道为什么会出现这种未定义的行为?非常感谢任何修复/解决方法!
答案 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
之后返回初始位置。哪个应该与pushd
和popd
不要在主shell中执行cd
。在子shell中进行所有处理:
(cd $location;
<some processing>)
我自己更喜欢最后一个。
另一方面(可能更好) - 重写处理以避免cd
。