Warum sind einige (oft lange) Befehle in Bash und Zsh verstümmelt?

Warum sind einige (oft lange) Befehle in Bash und Zsh verstümmelt?

Häufig kommt es vor, dass der Cursor bei der Eingabe eines langen Befehls in Bash oder Zsh (das sind die einzigen beiden Shells, in denen ich dies mit Sicherheit schon einmal gesehen habe) irgendwo in die Mitte der Zeichenfolge springt, die ich eingebe. Kann mir jemand erklären, warum das so ist und ob sich etwas dagegen tun lässt?

Mir ist aufgefallen, dass dies häufig passiert, wenn ich den Verlauf meiner Shell durchsehe (mit den Pfeiltasten). Wenn ich auf einen langen Eintrag stoße, wird der lange, neue Eintrag mit dem vorherigen Eintrag vermischt, wodurch der Text verstümmelt wird.

Ich habe ein Beispiel mit kurzen Zeichenfolgen, das mir gerade aufgefallen ist:

Die Geschichte enthält:

mkdir sune1
mkdir sune2

mkdir sune1Wenn ich zu und dann zu navigiere mkdir sune2, würde ich erwarten, dass meine Befehlszeile lautet mkdir sune2(da ich jetzt hierher navigiert bin), aber stattdessen erhalte ich mkdir1sune2.

Ich habe das jahrelang häufig bemerkt, aber es hat mich nie groß gestört, aber ich denke, es ist Zeit für eine Veränderung! Also, irgendwelche Ideen?

Antwort1

Ihre Eingabeaufforderungszeichenfolge hat wahrscheinlich nicht druckbare Zeichen falsch maskiert. Wenn Ihre Eingabeaufforderung beispielsweise Farbänderungen enthält, müssen Sie die Terminal-Escape-Sequenzen mit \[und \]umgeben, damit Bash erkennen kann, dass sie keinen Platz auf dem Bildschirm beanspruchen – andernfalls berechnet es die Position des eigentlichen Befehls auf dem Bildschirm falsch und aktualisiert ihn an der falschen Stelle. Siehedieser Abschnitt von TLDP. Setzen Sie in zsh %{und %}um Escape-Sequenzen herum.

verwandte Informationen