如何在bash中重定向嵌套函数调用的输出?

时间:2010-09-22 13:12:06

标签: bash pipe

我有一个bash脚本,它有一些函数,这些函数都在1个函数中调用。如何将所有功能的所有输出管道传输到主要功能?我也将使用tee将输出显示为term和日志文件。

func 1

func 2

func 3
    func 1

func 4 
    func 2
    func 3


call func 4 # i want to grab it here

3 个答案:

答案 0 :(得分:8)

嗯,如果有疑问,请使用( )运行子shell并重定向其整个输出。

所以,试试类似:

( mytoplevelfunc ) | tee whatever

答案 1 :(得分:3)

正如DigitalRoss所说,无论嵌套的功能和脚本有多深(最高达系统限制),所有stdout都会转到同一个地方,管道和发球工作。在下面的演示中,函数f4演示了一种方法,f5演示了另一种方式。

$ f1 () { echo f1; }
$ f2 () { echo f2; }
$ f3 () { echo f3; f1; }
$ f4 () { echo f4; f2; f3; }
$ f4
f4
f2
f3
f1
$ f4 | tee tee.out
f4
f2
f3
f1
$ cat tee.out
f4
f2
f3
f1
$ f5 () { { echo f4; f2; f3; } | tee tee2.out; }
$ f4 | tee tee.out
f4
f2
f3
f1
$ cat tee.out
f4
f2
f3
f1

答案 2 :(得分:0)

$ { echo aaaa; echo bbbb >/tmp/x; echo cccc; } >/tmp/y
$ cat x
bbbb
$ cat y
aaaa
cccc

甚至真正的嵌套重定向工作
(不仅仅是(),还有{}