色をサポートするウォッチの代替


12

phpunit色付きの出力があるコマンド()があります。によるとwatch、コマンドを使用して、--colorフラグを使用してカラーレンダリングをパススルーできるようにする必要があります。ただし、これは機能しません。これを解決する他の方法はありますか?


5
stdoutが端末でない場合に、色を出力しないコマンドではないのですか?試してくださいphpunit | cat
enzotib

1
@enzotibはおそらく正しいのですが、とにかく回避策としてBASHスクリプトを使用できます
sr_

phpunit | cat残念ながら機能しませんでした。ただし、bashスクリプトアプローチはうまく機能しました。ありがとう!
-netbrain

2
@netbrain:想定どおり、機能phpunit | catしないという事実は、問題がにphpunitあり、ではないという症状ですwatch
-enzotib

1
いくつかの一般的なUnix(Snow Leopardなど)では--color、の有効なフラグではありませんwatch
ステファンLasiewski

回答:


3

phpunit | cat動作しませんでした(これは コマンドではなく問題であることを示してwatchいますphpunit)。

別の方法として、次のbashスクリプトアプローチがうまく機能しました。

#!/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 端末に直接接続されていない場合にカラー出力を生成します。
シモヘ

0

ここでの実装は、bashスクリプトですが、関数に変換するのは非常に簡単です(「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.