Pregunta

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?

¿Fue útil?

Solución

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.

Otros consejos

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 $!
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top