Parece que o programa está reescrevendo as várias funções write () para detectar se você está imprimindo no descritor de arquivo 2 e, em seguida, adicionando os códigos de escape relevantes para tornar a saída vermelha no terminal.
Infelizmente, no shell, quando você faz algo como
echo "foo" 1>&2
A função ainda estará chamando write (ou alguma outra chamada de sistema semelhante) no descritor de arquivo 1. A saída aparece no fd 2, pois o descritor de arquivo 1 foi copiado para o descritor de arquivo 2 pelo seu shell.
Infelizmente, não sei como escrever / diretamente / para o fd 2 no shell, mas você pode usar o awk. Uma função como essa grava os argumentos diretamente no descritor de arquivo 2.
error() {
awk " BEGIN { print \"$@\" > \"/dev/fd/2\" }"
}
Eu acredito que este é um recurso do GNU awk que não faz parte do POSIX, mas também funciona no awk fornecido no OS X.