Se você olhar para o README de stderred
, você notará que ele modifica a % funçãowrite()
(e funções de fluxo associadas):
stderred hooks on write() and a family of stream functions (fwrite, fprintf, error...) from libc in order to colorize all stderr output that goes to terminal thus making it distinguishable from stdout. Basically it wraps text that goes to file with descriptor "2" with proper ANSI escape codes making text red.
Ênfase minha.
Quando você redireciona stdout para stderr, eles apontam para a mesma coisa, true. No entanto, as chamadas de função que gravaram para o stdout ainda se referem a ele como stdout, independentemente do redirecionamento feito. Eles ainda acessam o descritor de arquivo 1, não 2.
Se você deseja gravar em stderr e tê-lo colorido, o redirecionamento normal do shell não será suficiente. Você precisará usar algo que grava diretamente no stderr. A função awk em o similar Unix & A postagem do Linux pode ser adaptada para funcionar com vários argumentos:
error () (
IFS=' '
awk -v msg="$*" 'BEGIN { print msg > "/dev/stderr" }'
)
Eu usei /dev/stderr
, pois é mais fácil de ler e mencionado em os documentos do GNU awk . Observe também que usei ( )
em vez de { }
para o agrupamento de comandos. Isso faz com que os comandos sejam executados em um subshell, para que eu possa modificar com segurança o IFS sem que o shell ou script de chamada seja afetado.
Referências: