Распечатать что-то в консоли в том же месте предыдущего эха со своего рода отрицательным эхом

Я посмотрел на дистрибутив Postgresql 9.1.3, и вы также можете легко собрать его из исходников. Возможно, вам придется установить несколько пакетов -devl, но это должно быть несложно.

Я бы лично порекомендовал строить из исходников, если это важно. В противном случае приведенные выше ответы отлично подходят для Debian.

9
24.08.2018, 12:17
1 ответ

Типичный способ сделать это — не стереть один символ, а вернуться к началу строки с помощью возврата каретки(\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.

25
27.01.2020, 20:04

Теги

Похожие вопросы