首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >tee命令无效

tee命令无效
EN

Stack Overflow用户
提问于 2013-12-26 11:26:59
回答 1查看 6.8K关注 0票数 2

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

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

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

代码语言:javascript
复制
functioncall(){

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

当我运行Script.sh时,这个脚本成功运行,但是在第一次运行时,在logfile.log中只创建了一个条目,而在输出屏幕中,我可以看到循环运行了10次,循环计数增加并显示正确,但是logfile.log中的条目没有完成。

当我在脚本中注释行cd $Location时,它的行为就像所需的那样,这意味着O/P和logfile.log都显示了正确的循环数。

知道为什么这个未定义的行为会被观察到吗?任何修复/解决方法都非常感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-26 11:37:27

当您更改目录时,它将被更改。这意味着tee将写入一个新文件。

可能的解决办法:

  • 使用tee -a logfile.log代替tee -a <absolute_path_to_current_directory>/logfile.log
  • 将整个tee移出循环: 当你做完事情的时候logfile.log #奖金-你不需要-a在这里
  • cd之后返回到初始位置。这实际上应该用pushdpopd来完成
  • 不要在主外壳中执行cd。在子subshell中执行所有处理: (cd $location;)

我自己更喜欢最后一个。

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

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20784029

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档