Ich habe eine Hilfsfunktion zum Festlegen der Eingabeaufforderung. Da ich nicht mehr Zeit für die Suche nach Escape-Code-Referenzen aufwenden möchte, habe ich alle Textfarbwerte darin codiert.
function set_prompt ( )
{
# Prompt setup
# ##################
# Black \e[0;30m
# Blue \e[0;34m
# Green \e[0;32m
# Cyan \e[0;36m
# Red \e[0;31m
# Purple \e[0;35m
# Brown \e[0;33m
# Gray \e[0;37m
# Dark Gray \e[1;30m
# Light Blue \e[1;34m
# Light Green \e[1;32m
# Light Cyan \e[1;36m
# Light Red \e[1;31m
# Light Purple \e[1;35m
# Yellow \e[1;33m
# White \e[1;37m
local COLOR_DEFAULT='\[\e[0m\]'
local COLOR_BLACK='\[\e[0;30m\]'
local COLOR_BLUE='\[\e[0;34m\]'
local COLOR_GREEN='\[\e[0;32m\]'
local COLOR_CYAN='\[\e[0;36m\]'
local COLOR_RED='\[\e[0;31m\]'
local COLOR_PURPLE='\[\e[0;35m\]'
local COLOR_BROWN='\[\e[0;33m\]'
local COLOR_GRAY='\[\e[0;37m\]'
local COLOR_DARK_GRAY='\[\e[1;30m\]'
local COLOR_L_BLUE='\[\e[1;34m\]'
local COLOR_L_GREEN='\[\e[1;32m\]'
local COLOR_L_CYAN='\[\e[1;36m\]'
local COLOR_L_RED='\[\e[1;31m\]'
local COLOR_L_PURPLE='\[\e[1;35m\]'
local COLOR_YELLOW='\[\e[1;33m\]'
local COLOR_WHITE='\[\e[1;37m\]'
local PS1_SET_TITLE='\[\e]0;\w\a\]'
local PS1_SET_TIME="${COLOR_DEFAULT}\t"
local PS1_SET_RET_CODE="${COLOR_L_RED}(\$?)"
local PS1_SET_USER="${COLOR_L_GREEN}\u@\h"
local PS1_SET_PWD="${COLOR_YELLOW}\w"
local PS1_LN_1="${PS1_SET_TITLE}\n"
local PS1_LN_2="${PS1_SET_TIME} ${PS1_SET_RET_CODE} "
local PS1_LN_2="${PS1_LN_2}${PS1_SET_USER} ${PS1_SET_PWD} ${COLOR_DEFAULT}\n"
echo "${PS1_LN_1}${PS1_LN_2}"
}
Sie können dann tun:
PS1=$( set_prompt )
# Use '#' for root shell
export PS1=${PS1}'$ '
unset -f set_prompt
Hier ist der Link, der die VT100-Terminalcodes erklärt: http://www.termsys.demon.co.uk/vtansi.htm
\[
- Beginn der Sequenz nicht druckbarer Zeichen
\]
- Ende der Sequenz nicht druckbarer Zeichen
- Was ist der Unterschied zwischen "[\ e [32; 1m]" und \ e [32; 1m "? Sind sie gleich?
Nicht dasselbe, und es sollte \[\e[32;1m\]'. Without
[] `sein, es würde versuchen, die Sequenz in der Konsole zu drucken.
- Was bedeutet STARTCOLOR (\ e [40m) / ENDCOLOR (\ e [0m)?
STARTCOLOR bedeutet, den Hintergrund auf Schwarz zu setzen, ENDCOLOR bedeutet, alle Textattribute zurückzusetzen, was bedeutet, dass ich die Standardfarbe der Konsole habe.
\$
diese Option, um automatisch zwischen Root- und Nicht-Root-Anzeige zu wechseln.Aus dem Bash-Handbuch:
\[
und\]
werden nicht an das Terminal übergeben. Sie sagen Bash, dass die Zeichen zwischen ihnen nicht gedruckt werden. Ohne sie könnte bash nicht wissen, dass die Sequenz nach dem Escape-Zeichen (z. B.[32;1m
) keinen Platz auf dem Bildschirm einnimmt, was erklärt, warum die Länge der Eingabeaufforderung nicht korrekt berechnet wurde, als Sie sie weggelassen haben.Beachten Sie, dass Sie in Ihrer Frage nicht sehr konsequent waren (oder dass es nur ein Fehler mit Markdown ist). Sie müssen eine wörtliche Backslash-Bracket-Sequenz haben
$PS1
, nicht nur eine Bracket (die buchstäblich angezeigt wird).Die mit beginnenden Escape-Sequenzen
\e
werden vom Terminal-Emulator interpretiert. Sie sind im Dokument Xterm Control Sequences (ctlseqs) dokumentiert (andere Terminalemulatoren sind in der Regel größtenteils kompatibel). Wechselt beispielsweise\e[32;1m
zu fettem und grünem Vordergrund.\e[40m
schaltet die Hintergrundfarbe auf Schwarz um;\e[0m
stellt die Standardattribute wieder her.quelle
Die meisten modernen Terminalemulatoren können ANSI-Escape-Codes verwenden, um verschiedene Aspekte der Anzeige zu steuern.
Die meisten ANSI-Codes beginnen mit dem 2-stelligen Code ESC- [Dies ist das Escape-Zeichen (ASCII-Dezimalzahl 27), gefolgt vom offenen Zeichen in eckiger Klammer. Diese Sequenz wird auch als CSI oder Control Sequence Initiator bezeichnet.
Da es sich bei dem Escape-Zeichen nicht um ein Zeichen handelt, das Sie direkt eingeben können (die Esc-Taste hat andere, häufig anwendungsspezifische Verwendungszwecke), verwendet bash '\ e', um darauf zu verweisen.
Zum Ändern der Textfarbe wird der Befehl ANSI Set Graphics Mode verwendet:
Dabei
<value>
kann eine Liste von Werten durch Semikolons (;
) getrennt sein. Normalerweise wird nur ein Wert verwendet, obwohl das Fettattribut in Verbindung mit den Farbattributen nützlich ist.Wenn Sie sich die in der Antwort von Alexander Pogrebnyak aufgeführten Werte ansehen, wählt die 0 oder 1 vor dem Semikolon fett oder nicht:
Eine nützliche Liste der Codes finden Sie hier http://ascii-table.com/ansi-escape-sequences.php
quelle