색상을 지원하는 시계를 대체


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
일부 일반적인 유닉스 (Snow Leopard와 같은)에서 --color유효한 플래그가 아닙니다 watch.
Stefan 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
자세한 내용으로 답변을 업데이트하십시오. 따라서 질문에 대한 주석이 제거되면 도움이되지 않습니다. 최소한 사용하고있는 스크립트에 대한 링크를 포함 시키십시오.
Mat

@netbrain도 phpunit | cat작동하지 않았습니다 . STDOUT이 TTY가 아니라는 것을 알았을 때 watch색상을 제거하지 않고 phpunit출력하는 것이 아니라는 것이 테스트 였습니다 .
Patrick

phpunit --colors=always 터미널에 직접 연결되지 않은 경우 컬러 출력을 생성합니다.
simohe

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.