gpt4 book ai didi

bash - 自动将所有 stderr 和 stdout 捕获到一个文件并仍然显示在控制台上

转载 作者:行者123 更新时间:2023-11-29 09:10:38 24 4
gpt4 key购买 nike

我正在寻找一种方法来将所有标准输出和标准错误捕获到一个文件中,同时还将其输出到控制台。所以:

(set it up here)
set -x # I want to capture every line that's executed too
cat 'foo'
echo 'bar'

现在 foo 和 bar 的输出,以及 set -x 的调试输出,将被记录到某个日志文件并显示在控制台上。

我无法控制文件的调用方式,所以需要在文件开头设置。

最佳答案

您可以使用 exec 和进程替换将脚本内部的 stdout 和 stderr 发送到 tee。进程替换是一种 bashism,因此它不可移植,并且如果 bash 被称为/bin/sh 或使用 --posix 将无法工作。

exec > >(tee foo.log) 2>&1
set -x # I want to capture every line that's executed too
cat 'foo'
echo 'bar'
sleep 2

sleep 被添加到最后,因为到控制台的输出将被 tee 缓冲。 sleep 将有助于防止提示在输出完成之前返回。

关于bash - 自动将所有 stderr 和 stdout 捕获到一个文件并仍然显示在控制台上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8701518/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com