Alternativa para observar quais cores de suporte

11

Eu tenho um comando ( phpunit ) que tem uma saída colorida. De acordo com o comando watch , eu deveria poder usar o sinalizador --color para permitir a passagem da renderização de cor. No entanto, isso não está funcionando. Existe alguma outra maneira de resolver isso?

    
por netbrain 05.03.2012 / 15:30

2 respostas

3

phpunit | cat não funcionou (sinalizando que isso não é um problema com watch , mas com o comando phpunit ).

Como alternativa, a seguinte abordagem de script funcionou muito bem para mim:

#!/bin/bash
while true; do
    (echo -en '3[H'
        CMD="$@"
        bash -c "$CMD" | while read LINE; do 
            echo -n "$LINE"
            echo -e '3[0K' 
        done
        echo -en '3[J') | tac | tac 
    sleep 2 
done

Uso:

$ botch my-command
    
por 06.03.2012 / 08:48
0

Aqui minha implementação, é um script bash mas é muito fácil convertê-lo para funcionar (para alterar 'exit' para 'return')

#!/bin/bash

trap ctrl_c INT

function ctrl_c()
{
    echo -en "3[?7h" #Enable line wrap
    echo -e "3[?25h" #Enable cursor
    exit 0
}

function print_usage()
{
    echo
    echo '  Usage: cwatch [sleep time] "command"'
    echo '  Example: cwatch "ls -la"'
    echo
}

if [ $# -eq 0 ] || [ $# -gt 2 ]
then
    print_usage
    exit 1
fi

SLEEPTIME=1
if [ $# -eq 2 ]
then
    SLEEPTIME=${1}
    if [[ $SLEEPTIME = *[[:digit:]]* ]]
    then
        shift
    else
        print_usage
        exit 1
    fi
fi

CMD="${1}"
echo -en "3[?7l" #Disable line wrap
echo -en "3[?25l" #Disable cursor
while (true)
do

    (echo -en "3[H" #Sets the cursor position where subsequent text will begin
    echo -e "Every ${SLEEPTIME},0s: '3[1;36m${CMD}3[0m'3[0K"
    echo -e "3[0K" #Erases from the current cursor position to the end of the current line
    BASH_ENV=~/.bashrc bash -O expand_aliases -c "${CMD}" | while IFS='' read -r LINE 
    do
        echo -n "${LINE}"
        echo -e "3[0K" #Erases from the current cursor position to the end of the current line
    done
    #echo -en "3[J") | tac | tac #Erases the screen from the current line down to the bottom of the screen
    echo -en "3[J") #Erases the screen from the current line down to the bottom of the screen
    sleep ${SLEEPTIME}
done
    
por 08.03.2013 / 14:33