如何将脚本的输出记录到文件,同时将其保留在屏幕上?

如何将脚本的输出记录到文件,同时将其保留在屏幕上?

如何让我的脚本不仅输出到屏幕,而且将其输出记录到文件中?我希望这在脚本中自动完成,而不是要求用户通过管道tee或其他解决方案来输出。

答案1

使用tee

script.sh < inputfile | tee logfile

答案2

你没有指定,所以我假设这是一个 bash 脚本。根据man bash(强调我的):

exec [-cl] [-a name] [command [arguments]]
如果指定了 command,它将替换 shell。没有创建新进程。这些参数成为命令的参数。如果提供了 -l 选项,shell 会在传递给命令的第 0 个参数的开头放置一个破折号。这就是登录(1)的作用。 -c 选项导致命令在空环境中执行。如果提供了 a,shell 将 name 作为第 0 个参数传递给执行的命令。如果由于某种原因无法执行命令,则非交互式 shell 将退出,除非启用了 execfail shell 选项。在这种情况下,它会返回失败。如果文件无法执行,交互式 shell 将返回失败。如果未指定命令,则任何重定向都会在当前 shell 中生效,返回状态为0。如果存在重定向错误,则返回状态为1。

所以你可以使用流程替代运行tee记录到文件的副本,并将标准输出重定向到该文件,tee以便它立即打印和记录:

exec > >(tee /path/to/log-file)

如果你还想捕获stderr,则需要将其与stdout合并:

exec 2>&1

或者使用以下命令同时捕获两者:

exec &> >(tee /path/to/log-file)

相关内容