
Ich habe ein Problem mit der Bash-Eingabeaufforderung. Wenn ich einen Befehl eingebe, der länger als die Bildschirmbreite ist, wird er in derselben Zeile fortgesetzt und überschreibt, was ich geschrieben habe. Anschließend wird er in Zeile 2 fortgesetzt.
Das ist meine PS1:
PS1="\$(git_prompt) ${BIWhite}\W${Color_Off} → "
Die Variablen
BIWhite='\e[1;97m'
Color_Off='\e[0m'
Und dann das Skript für git_prompt:
git_prompt() {
local g="$(__gitdir)"
if [ -n "$g" ]; then
local MINUTES_SINCE_LAST_COMMIT=`minutes_since_last_commit`
if [ "$MINUTES_SINCE_LAST_COMMIT" -gt 30 ]; then
local COLOR=${BRed}
elif [ "$MINUTES_SINCE_LAST_COMMIT" -gt 10 ]; then
local COLOR=${BIYellow}
else
local COLOR=${BGreen}
fi
local SINCE_LAST_COMMIT="${COLOR}$(minutes_since_last_commit)m${Color_Off}"
# The __git_ps1 function inserts the current git branch where %s is
local GIT_PROMPT=`__git_ps1 "(%s|${SINCE_LAST_COMMIT})"`
echo ${GIT_PROMPT}
fi}
Ich bin für jede Hilfe dankbar! Danke!
Antwort1
\[
Zeichen, die den Cursor nicht bewegen, müssen zwischen und in PS1 eingeschlossen werden \]
, sonst denkt Bash, die Eingabeaufforderung sei länger als sie tatsächlich ist. Und aufgrund der Art und Weise, wie diese Variable verwendet wird, können Sie keine Funktion haben, die farbigen Text ausgibt, da Sie ihn nicht richtig maskieren können.
Sehenhttp://mywiki.wooledge.org/BashFAQ/053für weitere Erläuterungen.