Tonin wies auf einen Fehler in meiner Standardaufforderung hin . Minimales Beispiel:
PS1 einstellen:
PS1='$(exit_code=$?; [[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " ")$ '
Zu diesem Zeitpunkt sieht die Eingabeaufforderung folgendermaßen aus:
$
Lösen Sie nun die Ausgabe des Exit-Codes aus, indem Sie Folgendes ausführen:
false
Jetzt enthält die Eingabeaufforderung den Beendigungscode in rot am Anfang der Zeile:
1 $
- Drücken Sie Ctrl- r.
Geben Sie "false" ein. Jetzt enthält die Eingabeaufforderung nur die Suche:
(reverse-i-search)`false': false
- Drücken Sie Enter.
Die resultierende Terminal-Historie enthält nun Folgendes:
1 $ch)`false': false
Erwartete Ausgabe:
1 $ false
Das heißt, die Ausgabe der Verlaufssuche scheint mit der Eingabeaufforderung gemischt zu sein und den tatsächlich ausgeführten Befehl auszublenden.
Ich habe versucht, dies zu umgehen, indemPROMPT_COMMAND
ich Folgendes verwendete :
set_exit_code() {
exit_code=$?
[[ $exit_code -eq 0 ]] || printf %s $(tput setaf 1) $exit_code $(tput sgr0) " "
}
set_bash_prompt() {
PS1='$(set_exit_code)$ ' # Double quotes give the same result
}
PROMPT_COMMAND=set_bash_prompt
Dies scheint nicht zu funktionieren - die Linie sieht nach dem Suchen und Ausführen genauso aus wie zuvor.
Wie kann ich das beheben?