在 bash 脚本中 STDOUT 到 LOG,STDERR 到 LOG 和控制台

Inside a bash script STDOUT to LOG, STDERR to LOG and console

我有一个bash脚本,想写

我试过了

#!/bin/bash

main() {
        echo "HELLO"
        >&2 echo "ERROR"
}

LOGFILE=/tmp/mylog.log
main 1>>$LOGFILE 2>(tee -a $LOGFILE)

HELLO 转到日志文件,ERROR 只转到控制台。

我做错了什么?

您可以使用这个脚本:

#!/usr/bin/env bash

logfile='/tmp/mylog.log'

# open fd=3 redirecting to 1 (stdout)
exec 3>&1

# redirect stdout/stderr to a file but show stderr on terminal
exec >"$logfile" 2> >(tee >(cat >&3))

#exec 1>"$logfile" 2> >(tee -a "$logfile") 

main() {
   echo "HELLO"
   echo "ERROR" >&2
}

main

# close fd=3
exec 3>&-

它将在您的终端上写入 ERROR,但 HELLOERROR 都会写入 $logfile