我正在运行一个脚本,它使用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函数调用()函数在同一个脚本中定义。
functioncall(){
<some processing>
cd $Location
<some processing>
}当我运行Script.sh时,这个脚本成功运行,但是在第一次运行时,在logfile.log中只创建了一个条目,而在输出屏幕中,我可以看到循环运行了10次,循环计数增加并显示正确,但是logfile.log中的条目没有完成。
当我在脚本中注释行cd $Location时,它的行为就像所需的那样,这意味着O/P和logfile.log都显示了正确的循环数。
知道为什么这个未定义的行为会被观察到吗?任何修复/解决方法都非常感谢!
发布于 2013-12-26 11:37:27
当您更改目录时,它将被更改。这意味着tee将写入一个新文件。
可能的解决办法:
tee -a logfile.log代替tee -a <absolute_path_to_current_directory>/logfile.logtee移出循环:
当你做完事情的时候logfile.log #奖金-你不需要-a在这里cd之后返回到初始位置。这实际上应该用pushd和popd来完成cd。在子subshell中执行所有处理:
(cd $location;)我自己更喜欢最后一个。
另一方面(这可能更好)-重写处理以避免cd。
https://stackoverflow.com/questions/20784029
复制相似问题