রঙগুলি সমর্থন করে তা দেখার বিকল্প


12

আমার একটি কমান্ড আছে ( phpunit) যার রঙিন আউটপুট থাকে। watchকমান্ড অনুসারে , --colorরঙ রেন্ডারিংয়ের মধ্য দিয়ে যাওয়ার জন্য আমার পতাকাটি ব্যবহার করতে সক্ষম হওয়া উচিত । তবে, এটি কাজ করছে না। এটি সমাধানের অন্য কোনও উপায় আছে কি?


5
আপনি কি নিশ্চিত যে স্ট্যান্ডআউট টার্মিনাল নয় এমন কমান্ড নয় যা রঙগুলি আউটপুট দেয় না? চেষ্টা করুনphpunit | cat
enzotib

1
@ এঞ্জোটিব সম্ভবত সঠিক, তবে কোনও বেস স্ক্রিপ্ট যেকোনোভাবেই কাজ হিসাবে ব্যবহার করা যেতে পারে
sr_

phpunit | catদুর্ভাগ্যক্রমে কাজ হয়নি। তবে বাশ স্ক্রিপ্ট পদ্ধতির দুর্দান্ত কাজ করেছে। ধন্যবাদ!
নেটব্রাহীন

2
@ নেটব্রাইন: যেমনটি অনুমান করা যায় যে, কাজ করে না এমন ঘটনাটি 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
আরও বিশদ সহ আপনার উত্তর আপডেট করুন। যেমনটি হ'ল, যদি আপনার প্রশ্নের মন্তব্যগুলি সরানো হয়, তবে এটি খুব বেশি সহায়ক নয়। আপনি যে স্ক্রিপ্টটি ব্যবহার করছেন তার অন্তত লিঙ্ক অন্তর্ভুক্ত করুন বা আরও ভাল: আপনি যা করতে শেষ করেছেন তাই যা লিঙ্কটি মরে গেলে ভবিষ্যতের দর্শকদের সহায়তা করতে পারে।
মাদুর

@ নেটব্রাইনও phpunit | catকাজ করার কথা ছিল না। এটি watchরঙিন অপসারণ না করে প্রমাণ করার জন্য একটি পরীক্ষা বলে মনে করা হয়েছিল, বরং phpunitযখন এটি লক্ষ্য করলেন যে STDOUT টিটিওয়াই করছে না তখন সেগুলি আউটপুট করে নিচ্ছে।
প্যাট্রিক

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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.