2

I hope to record the result of stderr & stdout to different files, while watching both outputs from the terminal.

So I use tee, and found a solution in this page.

But the sad thing is, it can't work when put into a makefile:

all:
    @command > >(tee stdout.log) 2> >(tee stderr.log >&2)

It seems that make will use sh -c to execute this line, which doesn't understand well about the syntax.

Can we have another solution for this?

Community
  • 1
  • 1
sleepsort
  • 1,321
  • 15
  • 28

2 Answers2

4

In order to use this syntax in your Makefile you need to change the shell that make uses for running commands by setting the SHELL variable.

By invoking make using: make SHELL=/bin/bash, or putting SHELL:=/bin/bash at the start of the Makefile it should accomplish this.

Anya Shenanigans
  • 91,618
  • 3
  • 107
  • 122
0

A brute-force way would be to not tee in the makefile but instead tail -f one of the files in the background:

$ tail -f stderr.log & tail -f stdout.log
[... ^C]
$ kill $!
jthill
  • 55,082
  • 5
  • 77
  • 137