Проблемы с переносом строк в bash/php

Проблемы с переносом строк в bash/php

Я пишу программу, которая печатает цветные линии, и чем больше я с ней работаю, тем больше сталкиваюсь с проблемами переноса строк.

Это своего рода терминал, написанный на PHP, вот приглашение:

$return = readline("\033[44m\033[1;37m{$this->text}>>\033[0m ");

Если я прокручиваю историю, мой текст смещается на 10 символов, а если я ввожу 21 символ и удаляю один, то он очищает всю строку и начинает удалять символы из строки выше. Это на консоли шириной 47 столбцов

Если я попытаюсь добавить экранирования

$return = readline("\[\033[44m\033[1;37m\]{$this->text}>>\[\033[0m\] ");

затем он выводит скобки...даже если я добавляю двойные обратные косые черты.

\[\][timer]>>\[\] 

То же самое я обнаружил и у echo -e, я действительно не уверен, что происходит.

Наконец, если я модифицирую PS1, то все работает нормально.

[mike@crest ~]$ export PS1="\[\033[44m\033[1;37m\][timer]>>\[\033[0m\] "
[timer]>>

Что я здесь упускаю?

решение1

В соответствии сhttp://mywiki.wooledge.org/BashFAQ/053опция checkwinsizeможет быть необходима при прокрутке истории команд:

shopt -s checkwinsize

Связанный контент