Alternatif untuk menonton yang mendukung warna

12

Saya memiliki perintah ( phpunit) yang memiliki keluaran berwarna. Menurut watchperintah, saya harus dapat menggunakan --colorflag untuk memungkinkan rendering warna melewati. Namun, ini tidak berhasil. Apakah ada cara lain untuk menyelesaikan ini?

netbrain
sumber
5
Apakah Anda yakin itu bukan perintah yang tidak menampilkan warna ketika stdout bukan terminal? Cobaphpunit | cat
enzotib
1
Meskipun @enzotib mungkin benar, skrip BASH dapat digunakan sebagai solusi .
sr_
phpunit | catsayangnya tidak bekerja. Namun pendekatan bash script bekerja dengan baik. Terima kasih!
netbrain
2
@netbrain: seperti yang seharusnya, fakta yang phpunit | cattidak berfungsi adalah gejala bahwa masalahnya ada phpunitdan tidak ada watch.
enzotib
1
Pada beberapa Unix umum (Seperti Snow Leopard), --colorbukan bendera yang valid untuk watch.
Stefan Lasiewski

Jawaban:

3

phpunit | cattidak bekerja (menandakan bahwa ini bukan masalah dengan watchtetapi phpunit perintahnya).

Sebagai alternatif, pendekatan skrip bash berikut ini berhasil bagi saya:

#!/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

Pemakaian:

$ botch my-command
netbrain
sumber
6
Harap perbarui jawaban Anda dengan lebih detail. Karena, jika komentar pada pertanyaan Anda dihapus, itu tidak terlalu membantu. Sertakan setidaknya tautan ke skrip yang Anda gunakan, atau lebih baik: apa pun yang akhirnya Anda lakukan sehingga dapat membantu pengunjung di masa mendatang jika tautan itu mati.
Mat
@netbrain juga phpunit | cattidak seharusnya bekerja. Seharusnya tes untuk membuktikan watchtidak menghapus warna, tetapi bukannya phpunittidak mengeluarkannya ketika melihat bahwa STDOUT bukan TTY.
Patrick
phpunit --colors=always menghasilkan keluaran warna bila tidak terhubung langsung ke terminal.
simohe
0

Di sini implementasi saya, ini adalah skrip bash tetapi sangat mudah mengubahnya menjadi berfungsi (untuk mengubah 'keluar' menjadi 'kembali')

#!/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
Alejandro Besada Juez
sumber