观看支持颜色的替代品


12

我有一个phpunit带有彩色输出的命令()。根据watch,命令我应该能够使用该--color标志来允许颜色渲染通过。但是,这不起作用。还有其他解决方法吗?


5
您确定不是stdout不是终端时不输出颜色的命令吗?试试phpunit | cat
enzotib 2012年

1
虽然@enzotib可能是正确的,但无论如何,可以将BASH脚本用作解决方法
sr_

phpunit | cat不幸的是没有工作。但是,bash脚本方法效果很好。谢谢!
netbrain 2012年

2
@netbrain:如预期的那样,phpunit | cat不起作用的事实是问题在phpunit而不在的征兆watch
enzotib 2012年

1
在某些常见的Unix(例如Snow Leopard)上,--color不是有效的标志watch
Stefan Lasiewski'3

Answers:


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
请使用更多详细信息更新您的答案。照原样,如果您对问题的评论被删除,它不是很有帮助。至少包含指向您正在使用的脚本的链接,或者包括更好的链接:您最终所做的一切都是如此,以便在该链接失效时可以帮助将来的访问者。
2012年

@netbrain也不phpunit | cat应该工作。本来应该是一个测试,以证明watch没有去除颜色,而是phpunit在注意到STDOUT不是TTY时才输出它们。
Patrick

phpunit --colors=always 未直接连接到端子时会产生色彩输出。
simohe

0

在我的实现中,这是一个bash脚本,但是将其转换为函数非常容易(将“退出”更改为“返回”)

#!/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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.