如何在bash中重定向嵌套函数调用的输出?
我有一个bash脚本,它有几个函数,这些函数都在一个函数中调用。如何将所有函数的所有输出连接到主函数?我还将使用tee将输出显示到term和日志文件如何在bash中重定向嵌套函数调用的输出?,bash,pipe,Bash,Pipe,我有一个bash脚本,它有几个函数,这些函数都在一个函数中调用。如何将所有函数的所有输出连接到主函数?我还将使用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 正如DigitalRoss所说,所有stdout都位于同一个位置,无论函数和脚本嵌套的深度如何(达到系统限制),管道和T形三通都可以工作。在
func 1
func 2
func 3
func 1
func 4
func 2
func 3
call func 4 # i want to grab it here
正如DigitalRoss所说,所有stdout都位于同一个位置,无论函数和脚本嵌套的深度如何(达到系统限制),管道和T形三通都可以工作。在下面的演示中,函数
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
嗯,当有疑问时,使用
()
,它将运行子shell并重定向其整个输出
因此,尝试以下方法:
( mytoplevelfunc ) | tee whatever
即使是真正的嵌套重定向也可以工作(不仅仅是
()
,即使是{}
)我也很难理解这个问题。无论涉及多少shell函数或实命令,输出都会转到标准输出或标准错误。您已经可以将其从“主管道”导入管道。将shell函数的输出“管道化”到主函数意味着什么?好吧,我使用tee来记录输出并按术语显示它。问题是,其中一个函数调用外部脚本,并且没有记录任何输出。我能够记录它的唯一方法是,如果我在对脚本的一个特定调用上引导和tee输出。如果我尝试在两个位置都登录,文件会被锁定并且无法正常工作。我想这就是我要找的。谢谢
$ { echo aaaa; echo bbbb >/tmp/x; echo cccc; } >/tmp/y
$ cat x
bbbb
$ cat y
aaaa
cccc