Probleme mit dem Zeilenumbruch in Bash/PHP

Probleme mit dem Zeilenumbruch in Bash/PHP

Ich schreibe ein Programm, das farbige Linien druckt, und je mehr ich damit mache, desto häufiger muss ich mit den auftretenden Zeilenumbruchproblemen rechnen.

Es handelt sich um eine Art in PHP geschriebenes Terminal. Hier ist die Eingabeaufforderung:

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

Wenn ich durch den Verlauf scrolle, wird mein Text um 10 Zeichen verschoben, und wenn ich 21 Zeichen eingebe und eines lösche, wird die ganze Zeile gelöscht und die Zeichen der Zeile darüber werden gelöscht. Dies geschieht auf einer Konsole mit einer Breite von 47 Spalten.

Wenn ich versuche, Escapes hinzuzufügen

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

dann druckt es die Klammern ... auch wenn ich doppelte Backslashes hinzufüge.

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

Ich finde dasselbe für echo -e, ich bin wirklich nicht sicher, was los ist.

Und schließlich: Wenn ich PS1 ändere, funktioniert es einwandfrei.

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

Was übersehe ich hier?

Antwort1

Entsprechendhttp://mywiki.wooledge.org/BashFAQ/053Die checkwinsizeOption kann beim Durchblättern des Befehlsverlaufs erforderlich sein:

shopt -s checkwinsize

verwandte Informationen