Простая консольная графика, графический интерфейс или интерфейс из скрипта оболочки? - PullRequest
2 голосов
/ 28 мая 2011

Я бы хотел улучшить вывод сценария оболочки Bash, выполнив несколько простых ncurses -подобных отображений консоли.

Например, я хотел бы показать процентное значение, увеличивающееся, когда некоторая деятельность завершается. Я могу сделать это, выводя каждое процентное значение в новой строке, например,

0%
1%
2%
... etc. ...

Но я бы предпочел иметь обновление текста на месте (то есть сценарий записывает только одну строку вывода, чтобы показать процент, а затем значение процента, отображаемое в этой строке, изменяется). Я знаю, что мог бы использовать другой язык сценариев и ncurses, но есть ли решение Bash, которое не причиняет слишком много боли. Предпочтительно, я хотел бы что-то с широкой поддержкой различных Unix'ов.

Ответы [ 3 ]

2 голосов
/ 28 мая 2011

Для полной универсальности и переносимости это будет пакет dialog.Базовая ncurses сборка легко переносима;Существует также версия Gtk + GUI под названием gdialog.После этого у вас есть возможность выбора не только того, что вы описали, но и фактического виджета индикатора выполнения.

С другой стороны, просто выведите \r (используйте утилиту printf или в старых коммерческих Unixesecho -n ...^M или echo ... \r\c) позволит вам перезаписать строку.

2 голосов
/ 28 мая 2011

Вывод \r вернет курсор к первому столбцу, чтобы вы могли писать поверх текста, уже существующего. Если вам нужно более сложное движение, чем это, tput с различными возможностями cu* позволит вам перемещать и размещать курсор по своему усмотрению.

1 голос
/ 28 мая 2011

Используйте управляющие коды ANSI для использования или раскраски курсора.

Вот краткий пример на python (запустите его с флагом -u для небуферизованного, потому что иначе вы не увидите обновления):

#!/usr/bin/env python

import time
import sys

for i in range (10):
    sys.stdout.write ('%d\x1b[1D' % i)
    time.sleep (1)

CSInD ('\ x1b [1D') перемещает курсор на n позиций влево. А если вам нужен цветной курсор, просто напечатайте, например, '\ X1B [1; 31m. Работает практически на всех снарядах.

...