2

Я использую Bash на Mac OS X, а также Lubuntu. Когда я делаю консольные приложения, меня раздражает то, что

clear

добавит целое (х-число) строк в консоль. А потом я переписываю экран, который отнимает много времени и неэффективен.

Вместо этого я ищу способ, чтобы приложение не создавало лишних строк и не переписывало символы, которые отображаются в данный момент. (как команда "top")

Например, моему приложению нужно, чтобы число в верхнем левом углу консоли увеличивалось как можно быстрее.

Пример № 1: Использование clear

#!/bin/bash
for i in `seq 1 1000000`
do
    echo $i
    clear
done

Это было бы здорово, кроме того, что он "мерцает", иногда зависает, тратит место на консоли и, как правило, выглядит ужасно.

Пример № 2: Использование Backspace

#!/bin/bash
echo -e "\033[8;5;10;t"
clear
echo -e -n "0"

for i in `seq 1 1000000`
    do
    echo -e -n "\b\b\b\b\b\b\b$i"
done

Он работает как шарм, не создает лишних линий и быстр, но его можно запускать только в маленьких окнах.

Пример № 3: Использование формулы переписывания, которую делают top и alsamixer.

Как бы я сделал этот пример?

2 ответа2

5

Посмотрите на это ; в частности, я бы порекомендовал пример tput , поскольку он более или менее точно соответствует тому, что вы имеете в виду, и довольно легок в сценарии оболочки - что напрямую не отображает escape-последовательности. tput также учитывает termcap/terminfo, что поможет сделать ваши сценарии более переносимыми.

2

Вы ищете \r, символ возврата каретки. Это заставляет новый текст перезаписывать все, что находится в позиции курсора:

#!/bin/bash
for i in `seq 1 1000000`
    do
    echo -e -n "$i\r"
done

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .