Frage

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?

War es hilfreich?

Lösung

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.

Andere Tipps

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 $!
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top