जो रंगों का समर्थन करते हैं देखने के लिए वैकल्पिक


12

मेरे पास एक कमांड ( phpunit) है जिसमें रंगीन आउटपुट है। watchकमांड के अनुसार , मुझे --colorरंग रेंडरिंग को पारित करने की अनुमति देने के लिए ध्वज का उपयोग करने में सक्षम होना चाहिए । हालाँकि, यह काम नहीं कर रहा है। क्या इसे हल करने का कोई और तरीका है?


5
क्या आप सुनिश्चित हैं कि जब स्टडआउट टर्मिनल नहीं है, तो यह कमांड नहीं है जो रंगों का उत्पादन नहीं करता है? कोशिश करेंphpunit | cat
enzotib


phpunit | catदुर्भाग्य से काम नहीं किया। हालाँकि बैश स्क्रिप्ट एप्रोच ने बहुत काम किया। धन्यवाद!
netbrain

2
@netbrain: जैसा कि माना जाता है, जो तथ्य phpunit | catकाम नहीं करता है वह एक लक्षण है कि समस्या अंदर है phpunitऔर अंदर नहीं है watch
enzotib

1
कुछ सामान्य यूनिक्स (जैसे स्नो लेपर्ड) पर, के --colorलिए मान्य झंडा नहीं है watch
स्टीफन लासिवस्की

जवाबों:


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
कृपया अधिक विवरण के साथ अपना उत्तर अपडेट करें। वैसे भी, यदि आपके प्रश्न पर टिप्पणियाँ हटा दी जाती हैं, तो यह बहुत उपयोगी नहीं है। उस स्क्रिप्ट का कम से कम लिंक शामिल करें जिसका आप उपयोग कर रहे हैं, या बेहतर: जो कुछ भी आपने ठीक किया है, वह भविष्य के आगंतुकों की मदद कर सकता है यदि वह लिंक मृत हो जाता है।
Mat

@netbrain भी phpunit | catकाम करने वाला नहीं था। यह साबित करना watchथा कि रंगों को हटाने के लिए एक परीक्षण नहीं किया गया था, बल्कि phpunitजब वे यह देख रहे थे कि STDOUT एक TTY नहीं है, तो उन्हें आउटपुट नहीं दिया जा रहा है।
पैट्रिक

phpunit --colors=always रंग उत्पादन जब एक टर्मिनल से सीधे जुड़ा नहीं है।
सिमोहे

0

यहाँ मेरा कार्यान्वयन, यह एक बैश स्क्रिप्ट है, लेकिन इसे कार्य में बदलना ('निकास' को 'वापसी' में बदलना) बहुत आसान है

#!/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
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.