【问题标题】:Bash output all stdout both to console and fileBash 将所有标准输出输出到控制台和文件
【发布时间】:2017-09-30 00:57:08
【问题描述】:

我正在尝试将所有stdoutstderr 都输出到控制台和文件。我知道 ./script | tee somefile ,但这对我不起作用。我希望它自动完成,而不需要我从控制台进行管道传输。我试过了

#!/bin/sh
exec 2>&1 | tee somefile
echo "..."

但这没有用。什么是正确的解决方案?

【问题讨论】:

  • @soft87:我知道。我提到过,我不想从控制台通过管道传输它,就像那篇文章中描述的那样,我希望它总是这样做。所以即使我运行./somescript,我也会得到文件和控制台输出
  • 您是要对您运行的所有 命令执行此操作,还是仅对一个特定脚本执行此操作。如果是前者,要么运行diary,要么在后台运行 tee 从管道读取数据并将你的 shell 的 io 流重定向到该管道。如果是后者,只需在脚本中调用 tee。
  • @WilliamPursell:所有命令。我可能有多个 echo 命令,我不想每个都用管道传输

标签: linux bash shell scripting


【解决方案1】:

经典的解决方案是在脚本顶部添加类似这样的内容:

test -z "$REXECED" && { REXECED=1 exec $0 "$@" 2>&1 |  tee -a somefile; exit; }

您可能还喜欢:

test -t 1 && {  exec $0 "$@" 2>&1 |  tee -a somefile; exit; }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-06-09
    • 2011-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多