日志=/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
.