小编Ver*_*nge的帖子

为什么使用 tee 的重定向不能按预期工作?

我想要获得的是将脚本的所有输出记录到文件中,全部记录在脚本本身中,将我在屏幕上看到的所有内容保存在日志文件中。如果我不重定向到文件,脚本将按预期工作,继续无限循环,直到我按 CTRL+C;当发生这种情况时,它会在屏幕上打印几条消息并退出。如果我尝试使用 tee 重定向到文件,它不仅不会打印消息,而且日志也不完整,只有循环行,之后什么都没有。这是脚本(删减版):

#!/bin/sh
EXIT=0
COUNT=0
{
while [ $EXIT -eq 0 ]
do
  COUNT=$((COUNT+1)) && echo "Eternal loop $COUNT" && sleep 1
  trap 'EXIT=1; echo "Loop interrupted by user, exiting."' 15 2 8 20
done
echo "Out of loop, eternity ends"
} | tee log.log 2>&1
Run Code Online (Sandbox Code Playgroud)

我四处阅读,不明白我遇到的问题是否是由管道到 Tee、stderr 和 stdout 或我如何使用 trap 引起的。我是 shell 脚本编写的菜鸟,这令人沮丧,任何帮助将不胜感激。谢谢。

编辑1:阅读切普纳的答案后,我修改了脚本,如下所示:

#!/bin/sh
EXIT=0
COUNT=0
rm log.log
while [ $EXIT -eq 0 ]
do
COUNT=$((COUNT+1)) && echo "Eternal loop $COUNT" | tee -a log.log …
Run Code Online (Sandbox Code Playgroud)

shell tee io-redirection

4
推荐指数
1
解决办法
6913
查看次数

标签 统计

io-redirection ×1

shell ×1

tee ×1