我有一个类似以下的脚本
function long_proc()
{
#script1 that generate output1
#script2 that generate output2
....
}
long_proc > /tmp/debug.log
我的要求是完整的日志应该转移到/tmp/debug.log
,因为script2的输出应该转到stdout
以及日志文件。
任何人都可以帮助我吗?
答案 0 :(得分:2)
所以这就是我想你想做的事情。
要在stdout上保持输出,还要转到文件
long_proc(){
exec 4>&1
#redirect fd4(currently nothing hopefully) to stdout
exec 1>&3
#redirect stdout to fd3(also hopefully unused)
#Note you have 5 more to choose from if they are in use.
echo Just log
#script1 that generate output1
echo Log and Stdout | tee >(cat - >&4)
#script1 that generate output2
# Tee into a subproc to cat data into fd4 pointing to stdout
#The tee'd data also goes to fd3
exec 1>&4
# set fd1 back to stdout
exec 4>&-
#close fd4
}
long_proc 3> log
#Send fd3 to log, stdout is untouched and does whatever you want.
因此将所有输出重定向到fd3,然后将其全部传送到日志中。 在stdout进入stdout任何你想要进入stdout的东西。
这样做的好处是你可以像
那样进行管道传输long_proc 3> log | sed 's/^/Piped and /'