Thay thế để xem màu nào hỗ trợ


12

Tôi có một lệnh ( phpunit) có đầu ra màu. Theo watchlệnh, tôi sẽ có thể sử dụng --colorcờ để cho phép hiển thị màu đi qua. Tuy nhiên, điều này không hoạt động. Có cách nào khác để giải quyết điều này?


5
Bạn có chắc chắn rằng đó không phải là lệnh không xuất màu khi thiết bị xuất chuẩn không phải là thiết bị đầu cuối? Hãy thửphpunit | cat
enzotib


phpunit | catThật không may làm việc. Tuy nhiên, cách tiếp cận bash script làm việc tuyệt vời. Cảm ơn!
netbrain

2
@netbrain: như được cho là, thực tế là phpunit | catkhông hoạt động là một triệu chứng mà vấn đề xảy ra phpunitvà không xảy ra watch.
enzotib

1
Trên một số Unix phổ biến (Chẳng hạn như Snow Leopard), --colorkhông phải là cờ hợp lệ cho watch.
Stefan Lasiewski

Câu trả lời:


3

phpunit | catkhông hoạt động (báo hiệu rằng đây không phải là vấn đề với watchnhưng phpunit lệnh).

Thay vào đó, cách tiếp cận bash script sau đây có hiệu quả với tôi:

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

Sử dụng:

$ botch my-command

6
Vui lòng cập nhật câu trả lời của bạn với nhiều chi tiết hơn. Vì nó là, nếu các ý kiến ​​về câu hỏi của bạn bị xóa, nó không hữu ích lắm. Bao gồm ít nhất là liên kết đến tập lệnh mà bạn đang sử dụng hoặc tốt hơn: bất cứ điều gì bạn đã làm chính xác để nó có thể giúp khách truy cập trong tương lai nếu liên kết đó bị chết.
Mat

@netbrain cũng phpunit | catkhông được cho là hoạt động. Nó được cho là một thử nghiệm để chứng minh rằng watchkhông loại bỏ màu sắc, nhưng phpunitkhông xuất ra chúng khi nhận thấy rằng STDOUT không phải là một TTY.
Patrick

phpunit --colors=always tạo ra màu đầu ra khi không được kết nối trực tiếp với thiết bị đầu cuối.
simohe

0

Ở đây tôi thực hiện, đó là một tập lệnh bash nhưng rất dễ dàng chuyển đổi nó thành chức năng (để thay đổi 'exit' thành '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
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.