从重定向到文件中转义回声输出

时间:2016-07-12 12:21:52

标签: linux bash shell echo

我有一个类似以下的脚本

function long_proc()
{
    #script1 that generate output1
    #script2 that generate output2
    ....
}

long_proc > /tmp/debug.log

我的要求是完整的日志应该转移到/tmp/debug.log,因为script2的输出应该转到stdout以及日志文件。

任何人都可以帮助我吗?

1 个答案:

答案 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 /'