Como seu sistema é um wrapper em torno do make, presumo que ele gere o makefile. Ajuste seu gerador para adicionar 2>&3
a todos os comandos shell no makefile, e faça seu programa redirecionar o descritor de arquivo 3 para o erro padrão (descritor de arquivo 2) e o descritor de arquivo 2 para /dev/null
. Dessa forma, o próprio programa make imprime em seu erro padrão, que vai para /dev/null
, e os comandos de compilação serão impressos em seu erro padrão, que vai para o erro padrão do wrapper.
Se você estiver usando um makefile manuscrito, poderá transformá-lo para adicionar esses redirecionamentos, supondo que o makefile não fique muito louco com a sintaxe (por exemplo, nenhum GNU sofisticado cria macros que geram comandos). Para cada linha que começa com uma guia e, opcionalmente, @
ou -
e onde a linha anterior não termina com uma barra invertida, adicione exec 2>&3;
após a guia e opcional @-
.
Em vez de alterar o makefile, você pode invocá-lo com o argumento SHELL=/path/to/shell_wrapper
, em que shell_wrapper
executa seu argumento com o erro padrão redirecionado para um descritor diferente, algo assim:
#!/bin/sh
eval "$2" 2>&3