Alternativa a guardare quali colori di supporto


12

Ho un comando ( phpunit) che ha un output colorato. Secondo il watchcomando, dovrei essere in grado di usare la --colorbandiera per consentire il passaggio della resa cromatica. Tuttavia, questo non funziona. Esistono altri modi per risolvere questo?


5
Sei sicuro che non sia il comando che non genera colori quando stdout non è un terminale? Provaphpunit | cat
enzotib

1
Sebbene @enzotib probabilmente abbia ragione, uno script BASH potrebbe comunque essere usato come soluzione alternativa .
sr_

phpunit | catpurtroppo non ha funzionato. Tuttavia, l'approccio di script bash ha funzionato alla grande. Grazie!
netbrain

2
@netbrain: come si suppone, il fatto che phpunit | catnon funzioni è un sintomo del problema phpunite non del problema watch.
enzotib,

1
Su alcuni Unix comuni (come Snow Leopard), --colornon è un flag valido per watch.
Stefan Lasiewski

Risposte:


3

phpunit | catnon ha funzionato (segnalando che questo non è un problema watchma il phpunit comando).

In alternativa, il seguente approccio bash script ha funzionato perfettamente per me:

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

Uso:

$ botch my-command

6
Aggiorna la tua risposta con maggiori dettagli. Così com'è, se i commenti sulla tua domanda vengono rimossi, non è molto utile. Includi almeno il link a quello script che stai utilizzando, o meglio: qualunque cosa tu abbia fatto esattamente, in modo che possa aiutare i futuri visitatori se quel link si interrompe.
Mat

Anche @netbrain phpunit | catnon avrebbe dovuto funzionare. Doveva essere un test per dimostrare che watchnon stava rimuovendo i colori, ma piuttosto phpunitnon li stava producendo quando notò che STDOUT non era un TTY.
Patrick,

phpunit --colors=always produce output a colori quando non è collegato direttamente a un terminale.
simohe

0

Qui la mia implementazione, è uno script bash ma è molto facile convertirlo in funzione (per cambiare 'exit' in 'return')

#!/bin/bash

trap ctrl_c INT

function ctrl_c()
{
    echo -en "\033[?7h" #Enable line wrap
    echo -e "\033[?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 "\033[?7l" #Disable line wrap
echo -en "\033[?25l" #Disable cursor
while (true)
do

    (echo -en "\033[H" #Sets the cursor position where subsequent text will begin
    echo -e "Every ${SLEEPTIME},0s: '\033[1;36m${CMD}\033[0m'\033[0K"
    echo -e "\033[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 "\033[0K" #Erases from the current cursor position to the end of the current line
    done
    #echo -en "\033[J") | tac | tac #Erases the screen from the current line down to the bottom of the screen
    echo -en "\033[J") #Erases the screen from the current line down to the bottom of the screen
    sleep ${SLEEPTIME}
done
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.