我想要获得的是将脚本的所有输出记录到文件中,全部记录在脚本本身中,将我在屏幕上看到的所有内容保存在日志文件中。如果我不重定向到文件,脚本将按预期工作,继续无限循环,直到我按 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)