linux + 将标准输出和标准错误写入日志和控制台

linux + 将标准输出和标准错误写入日志和控制台

日志=/tmp/log.txt

以下语法将所有标准输出和标准错误写入 log.txt 文件

执行 > $log 2>&1

我们想要的是将标准输出和标准错误写入 log.txt,同时将标准输出 + 标准错误写入控制台

是否可以 ?

答案1

可能有更简单的方法可以做到这一点,但经典的解决方案是这样的:

#!/bin/bash

trap 'rm $TMP' 0
TMP=$(mktemp)
rm $TMP
mkfifo $TMP
tee < $TMP ${log:-/tmp/log.txt} &
exec > $TMP 2>&1

不言而喻,这里存在巨大的安全性和可靠性问题,因为任何其他进程都可以从 fifo 读取或写入。如果您想做这种事情,最好使用一个简单的包装器,将脚本的输出通过管道传输到tee.

相关内容