ทางเลือกในการรับชมซึ่งสนับสนุนสี


12

ฉันมีคำสั่ง ( phpunit) ซึ่งมีเอาต์พุตสี ตามwatchคำสั่งฉันควรจะสามารถใช้--colorธงเพื่อให้การแสดงผลสีผ่าน อย่างไรก็ตามสิ่งนี้ไม่ทำงาน มีวิธีอื่นในการแก้ปัญหานี้หรือไม่?


5
คุณแน่ใจหรือไม่ว่าไม่ใช่คำสั่งที่ไม่ส่งสีเมื่อ stdout ไม่ใช่เทอร์มินัล ลองphpunit | cat
enzotib

1
แม้ว่า @enzotib นั้นถูกต้อง แต่สคริปต์ BASH สามารถใช้เป็นวิธีแก้ปัญหาได้
sr_

phpunit | catไม่ได้ทำงานอย่างน่าเสียดาย อย่างไรก็ตามวิธีการทุบตีสคริปต์ทำงานได้ดีมาก ขอบคุณ!
netbrain

2
@netbrain: เป็นควรความจริงที่ว่าphpunit | catจะไม่ได้ทำงานเป็นอาการที่เป็นปัญหาในและไม่ได้อยู่ในphpunit watch
enzotib

1
เมื่อวันที่ Unixes บางอย่างร่วมกัน (เช่น Snow Leopard), ไม่ได้เป็นธงที่ถูกต้องสำหรับ--color watch
Stefan Lasiewski

คำตอบ:


3

phpunit | catไม่ทำงาน (การส่งสัญญาณว่านี่ไม่ใช่ปัญหาwatchแต่เป็นphpunit คำสั่ง)

เป็นอีกทางเลือกวิธีสคริปต์ทุบตีต่อไปนี้ใช้งานได้ดีสำหรับฉัน:

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

การใช้งาน:

$ botch my-command

6
โปรดอัปเดตคำตอบของคุณพร้อมรายละเอียดเพิ่มเติม ถ้าหากความคิดเห็นในคำถามของคุณถูกลบออกไปมันจะไม่เป็นประโยชน์มากนัก ใส่อย่างน้อยลิงค์ไปยังสคริปต์ที่คุณใช้อยู่หรือดีกว่า: สิ่งที่คุณทำลงไปนั้นจะช่วยผู้เยี่ยมชมในอนาคตได้ถ้าลิงค์นั้นเสียไป
จ้า

@netbrain ก็phpunit | catไม่ควรทำงานเช่นกัน มันควรจะเป็นการทดสอบเพื่อพิสูจน์watchว่าไม่ได้ลบสี แต่แทนที่จะphpunitส่งออกพวกเขาเมื่อมันสังเกตเห็นว่า STDOUT ไม่ได้เป็น TTY
แพทริค

phpunit --colors=always สร้างเอาต์พุตสีเมื่อไม่ได้เชื่อมต่อกับเทอร์มินัลโดยตรง
simohe

0

นี่คือการนำไปใช้ของฉันมันเป็นสคริปต์ทุบตี แต่มันง่ายมากที่จะแปลงเป็นฟังก์ชัน (เพื่อเปลี่ยน 'exit' เป็น '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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.