Você tem isso:
if [ "$SVN_COLOR" != "always" ] && (
[ $NOCOL = 1 ] || [ "$SVN_COLOR" = "never" ] || [ ! -t 1 ]
)
É o teste [ ! -t 1 ]
que está causando sua função para retornar muito cedo. Quando você canaliza sua função para um pipe, o stdout (descritor de arquivo 1
) é não um terminal.