在 bash 脚本中 STDOUT 到 LOG,STDERR 到 LOG 和控制台
Inside a bash script STDOUT to LOG, STDERR to LOG and console
我有一个bash脚本,想写
- STDOUT 仅输出到日志文件(不输出到控制台)
- STDERR 到同一个日志文件和控制台
我试过了
#!/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
,但 HELLO
和 ERROR
都会写入 $logfile
。
我有一个bash脚本,想写
- STDOUT 仅输出到日志文件(不输出到控制台)
- STDERR 到同一个日志文件和控制台
我试过了
#!/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
,但 HELLO
和 ERROR
都会写入 $logfile
。