将脚本输出复制到文件

时间:2014-04-30 17:08:52

标签: bash logging

我有一系列bash scripts echo大量数据发送到stdout,偶尔发送到stderr。有一个主bash script,然后是imports和/或invokes许多其他bash scripts

我正在尝试实现一些东西,它不仅会捕获父脚本的输出,还会捕获所有子脚本的输出。我需要同时捕获stdoutstderr,以便编译等任何问题都会在此日志文件中捕获。

我知道tee,当然还有正常的stdout重定向> ...但是如果没有将这些命令添加到每个行中,这些似乎不起作用脚本,父母和孩子。这些脚本中有几千行,因此即使使用sed,向每行添加重定向也是不切实际的。

我见过以下建议:Redirect stderr and stdout in a Bash script

但这些需要编辑脚本中的每一行。强制我的用户安装screen也是不切实际的。

UPDATE:

忘记提及我希望输出仍然显示在控制台上以及写入日志。脚本需要几个小时才能运行,用户需要知道发生了什么......

1 个答案:

答案 0 :(得分:3)

您可以使用yourmainscript 2>&1 | tee logyourmainscript中的所有导入/调用的脚本捕获stdout和stderr,同时在屏幕上显示它。

yourmainscript内,您可以使用以下方式获得相同的效果:

echo "Redirecting the rest of script output to 'log'"
exec > >(tee log) 2>&1
rest of your code

仅重定向某个部分:

echo "Redirecting the next commands"
{
  cmd1
  cmd2
} > >(tee log) 2>&1
echo "Continuing as normal"