每次循环迭代生成一个日志文件(bash)?

每次循环迭代生成一个日志文件(bash)?

假设我在终端中有一个循环,它创建了一组目录,执行了一组任务,并且我希望将每个命令系列的命令写入新目录中的日志文件。这可以通过几种方式来实现(使用 echo/going with python),但我想知道有没有什么简单的方法可以轻松地在循环前面传递命令,该命令会自动在循环运行的命令的新目录中创建一个日志文件。编辑:这里的日志文件我的意思是仅收集传递到终端的最终命令。

这样做的部分动机是我将在我的命令中传递的参数中随机生成波动,并且就像“在此循环中标记以下命令以进行日志记录”而不是必须分配变量值然后回显它们。了解是否存在某种“log”命令在许多其他情况下都会有所帮助,因此我更喜欢这种效果的答案。

答案1

在组中执行重要命令,并重定向组中的输出:

for dir in dir1 dir2 ...; do
    logfile="$dir"/log.log       # or whatever name you want
    {
         : create a set of directories
         : perform a set of tasks
    } > "$logfile"
done

如果您也想在终端上输出,请将重定向更改为管道tee

    } | tee "$logfile"

相关内容