我有一个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
答案 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
甚至真正的嵌套重定向工作
(不仅仅是()
,还有{}
)