Nicht druckbare Zeichen werden in der Terminal-Eingabeaufforderung angezeigt

Nicht druckbare Zeichen werden in der Terminal-Eingabeaufforderung angezeigt

Ohne Farbe sieht meine Eingabeaufforderung folgendermaßen aus:

[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[0] [dimo414@dimo414:/tmp]\n\$

Ich füge etwas Farbe hinzu und \[... \]grenze es ab:

[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\[\e[32m\]0\[\e[0m\]] [\[\e[34m\]dimo414\[\e[0m\]\[\e[32m\]@dimo414\[\e[0m\]:\[\e[94m\]/tmp\[\e[0m\]]\n\$

Ursprüngliche Eingabeaufforderung

Sieht toll aus! Aber dieBashFAQmacht darauf aufmerksam, dass:

Die \[ \] sind nur dann speziell, wenn Sie PS1 zuweisen. Wenn Sie sie innerhalb einer Funktion drucken, die ausgeführt wird, wenn die Eingabeaufforderung angezeigt wird, funktioniert es nicht. In diesem Fall müssen Sie die Bytes \001 und \002 verwenden.

Wenn ich jedoch meine Eingabeaufforderung ändere, sodass stattdessen \001und verwendet wird \002, erhalte ich Folgendes (StackExchange rendert sie scheinbar korrekt als Zeichen mit der Breite Null, aber sie sind da):

[0] [dimo414@dimo414:/tmp]
$ echo $PS1 | sed 's/\x1b/\\e/g'
\n[\e[32m0\e[0m] [\e[34mdimo414\e[0m\e[32m@dimo414\e[0m:\e[94m/tmp\e[0m]\n\$

Neue, defekte Eingabeaufforderung

Diese gleiche Eingabeaufforderung – mit \001... \002– sieht in iTerm2 unter OSX korrekt aus.

Um den Farbsequenzen zu entkommen, verwende ich diese beiden Befehle:

# Previously (works)
printf '\[%s\]' "$(color "$@")"

# Currently (doesn't work on Ubuntu)
printf '\001%s\002' "$(color "$@")"

Was sollte ich anstelle der zweiten Option tun, um \001... \002unter Ubuntu zu verwenden?

verwandte Informationen