In einer Bash-Eingabeaufforderung (PS1-Variable) rufe ich eine Funktion auf, um der Eingabeaufforderung möglicherweise Text hinzuzufügen: export PS1="\u@\h \$(my_function) \$ "
Die Funktion in der Eingabeaufforderung enthält jedoch ANSI-Farbcodes, die sich je nach Ausgabe der Funktion ändern (manchmal rot, manchmal grün). Das Hinzufügen von " \[
" zur PS1-Variablen sollte diese Codes als nicht druckbar kennzeichnen, aber wenn ich eine echo
Funktion ausführe, wird die " \[
" in der Eingabeaufforderung buchstäblich gedruckt.
Wie kann ich diese ANSI-Farbcodes innerhalb einer Funktion für die Verwendung in einer Bash-Eingabeaufforderung umgehen?
echo -e "\001\e[31m\002RED"
funktioniert wie erwartet. Vielen Dank!\001
und\002
funktionieren. Ansonsten bin ich mir nicht sicher. Dash zum Beispiel verwendet Readline definitiv nicht .Hier ist eine schöne vollständige Antwort. Ich musste viel mehr graben, um herauszufinden, wohin die \ 001 usw. mussten. Hoffe das hilft.
So wie ich es hier eingerichtet habe, werden die Klammern des Git-Zweigs nur angezeigt, wenn Sie sich in einem Git-Zweig befinden, andernfalls ist sie leer.
quelle
Basierend auf der Antwort von grawity werden im Folgenden ANSI-Steuersequenzen in ASCII
SOH
(^A
) undSTX
(^B
) eingeschlossen, die äquivalent zu\[
bzw.\]
sind:Verwenden Sie es wie folgt:
Oder:
Ein Bonus ist, dass durch mehrmaliges Ausführen der Funktion bereits entflohene Steuercodes nicht wiederhergestellt werden.
quelle
Wenn Sie sie in der Eingabeaufforderung verwenden möchten, müssen Sie das tun
\[
. Aber wenn Sie es in einem Echo verwenden möchten, müssen Sie verwenden\033[
.quelle