Как перенаправить вывод вложенных вызовов функций в bash? - PullRequest
5 голосов
/ 22 сентября 2010

У меня есть скрипт 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

Ответы [ 3 ]

8 голосов
/ 22 сентября 2010

Хм, если есть сомнения, используйте ( ), который запустит подоболочку и перенаправит весь вывод.

Итак, попробуйте что-то вроде:

( mytoplevelfunc ) | tee whatever
3 голосов
/ 22 сентября 2010

Как сказал 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
0 голосов
/ 19 декабря 2014
$ { echo aaaa; echo bbbb >/tmp/x; echo cccc; } >/tmp/y
$ cat x
bbbb
$ cat y
aaaa
cccc

работает даже реальное вложенное перенаправление
(не только с (), но даже с {})

...