Bash-Eingabeaufforderung mit Steuerzeichen mit der Breite Null

Bash-Eingabeaufforderung mit Steuerzeichen mit der Breite Null

Um zu verhindern, dass sich die Eingabeaufforderung um von rechts nach links verlaufenden Text verzieht, möchte ich ein LRM mit der Breite Null in die Bash-Eingabeaufforderung einfügen (U200e). Da es sich um ein Zeichen mit der Breite Null handelt, war mein Instinkt, es mit zu umschließen \[<200e>\]. Es stellte sich heraus, dass dies tatsächlich dazu führt, dass Bash den Zeilenumbruch an der falschen Stelle durchführt. Wenn ich es nicht mit irgendetwas umschließe,Dannes scheint gut zu funktionieren.

Was ich nicht verstehe. Selbst wenn Bash automatisch erkennt, dass dieses Zeichen eine Breite von Null hat, \[...\]hätte es nicht schaden dürfen, es mit einem zu umschließen.

BEARBEITET: Die Frage ist also: Wann ist \[...\]das Escapen tatsächlich erforderlich und wie kann es möglicherweise schädlich sein, wenn die Escape-Zeichen tatsächlich die Breite Null haben.

Antwort1

Zum Beitrag Escapen von Zeichen der Länge Null in Bash. und insbesondere die Antwort von Michael Allen die ich im Folgenden wiedergebe:

Die \[Sequenzen werden von einigen Dienstprogrammen, einschließlich PS1, verwendet, um die \001Steuercodes \002darzustellen:

\[=> \x01oder\001

\]=> \x02oder\002

\[printf und echo führen diese Übersetzung von nach nicht durch \001.

Die Lösung bestand also darin, die Konvertierung selbst vorzunehmen. Anstatt Zeichen der Länge Null in Folgendes einzuschließen \[:

echo "\[\033[1;30m\]foo\[\033[0m\]"

was ausgeben würde\[foo\]

Stattdessen gebe ich den eigentlichen Steuercode aus:

echo "\x01\033[1;30m\x02foo\x01\033[0m\x02"

foowelches sowohl auf PS1 printf als auch echo ausgibt .

Ein konkretes Beispiel finden Sie unterdieses Commit auf Git-Radar.

verwandte Informationen