Я посмотрел на дистрибутив Postgresql 9.1.3, и вы также можете легко собрать его из исходников. Возможно, вам придется установить несколько пакетов -devl, но это должно быть несложно.
Я бы лично порекомендовал строить из исходников, если это важно. В противном случае приведенные выше ответы отлично подходят для Debian.
Типичный способ сделать это — не стереть один символ, а вернуться к началу строки с помощью возврата каретки(\r
):
printf "89%%"; sleep 1; printf "\r90%%\n"
Обратите внимание, что это не очищает строку, так что вам нужно позаботиться об этом, если это необходимо. Простыми вариантами являются добавление пробелов в конец или фиксированная ширина вывода -(, например. printf "%2d%%\n" 1
дает ведущее пространство ).
Существуют последовательности терминала, которые позволяют перемещаться и очищать части экрана, последовательности CSI , но они зависят от терминала -(, хотя на практике экраны VT100 поддерживаются везде сейчас ). Например
printf "89%%"; sleep 1; printf "\e[3D90%%\n"
использует ␛[3D
для перемещения на три символа влево и записывает поверх них (при условии, что ваш printf
поддерживает\e
);
printf "89%% hello"; sleep 1; printf "\e[0E\e[K90%%\n"
использует ␛[0E
для перехода к началу текущей строки и ␛[K
для очистки до конца строки (при условии, что ваш терминал поддерживает эти последовательности ).
tput
обеспечивает терминал -иprintf
-независимый способ доступа к этим последовательностям:
printf "89%%"; sleep 1; tput cub 3; tput el; printf "90%%\n"
переместит курсор влево три раза(cub 3
)и очистит до конца строки (el
), используя любую последовательность символов, подходящую для текущего терминала;
printf "89%% hello"; sleep 1; tput hpa 0; tput el; printf "90%%\n"
переместит курсор в -самый левый столбец(hpa 0
)и очистит его до конца строки.
man terminfo
сообщит вам, какое «имя возможности» использовать с tput
.
(Обратите внимание, что многие особенности приведенных выше примеров предполагают, что весь ваш вывод находится в одной строке. Они не должны служить доказательством -дурака, а предназначены только для иллюстрации различных подходов.)
Аналогичное управление экраном в PHP-скриптах можно найти в расширении PECL ncurses
.