Entsprechenddieser StackOverflow-Beitrag, es ist möglich, in KornShell eine farbige Eingabeaufforderung zu haben. Ich konnte nicht herausfinden, wie das geht. Ich kann Farbe verwenden:
echo -e "\033[34mLinux\033[00m"
gibt eine blaue „Linux“-Ausgabe aus, ebenso wie:
printf "\033[34mLinux\033[00m"
Wenn ich die Escape-Codes jedoch in meine PS1
Prompt-Variable einbaue, werden sie nicht maskiert. Was muss ich tun, um einen farbigen Prompt zu erhalten? Abgesehen davon, dass ich ein Fan von Eyecandy bin, finde ich, dass ein farbiger Prompt beim visuellen Parsen von Ausgaben nützlich ist.
Antwort1
Verwenden Sie einfach ein wörtliches Esc-Zeichen, eingegeben mit Ctrl- v, Esc(wird wie ^[
auf dem Bildschirm angezeigt):
PS1="^[[34mLinux^[[00m"
Oder verwenden Sie die Ausgabe des echo
Befehls, von dem Sie feststellen, dass er funktioniert:
PS1="$(echo -e "\033[35mLinux\033[00m")"
Antwort2
Sie müssen ein wörtliches Escape-Zeichen in die PS1
Variable einfügen. Ksh88 und Klone wie pdksh und mksh (ältere Versionen) haben keine wörtliche Syntax für Steuerzeichen, außer über die print
integrierten. Mksh versteht \e
Escape, aber pdksh erfordert den Oktalcode \033
.
PS1=$(print '\033[34mLinux\033[00m')
ATT ksh93 führt die Literalsyntax mit Backlash-Escapezeichen ein $'…'
(seit R39b auch in mksh verfügbar). Sie können Backslash-Escapezeichen verwenden, um Steuerzeichen in diese Literale einzufügen.
PS1=$'\e[34mLinux\e[00m'
Antwort3
Ich verwende diese mksh
für einen Benutzer shell
:
# custom prompt see http://comments.gmane.org/gmane.os.miros.mksh/126
PS1=$'\a\r\a\e[1;34m\a ^ ^ ^ ^ | \a\e[36m\a${USER:=$(ulimit -c 0; id -un 2>/dev/null || echo
\?)}@${HOSTNAME%%.*}\a\e[34m\a | ^ ^ ^ ^ | \a\e[0;33m\a$(local d=${PWD:-?} p=~; [[ $p = ?(*/) ]] || d=${d/#$p/~};
print -nr -- "$d")\a\e[1;34m\a |\n ^ ^ ^ ^ | \a\e[32m\a$(date +%H:%M)\a\e[34m\a | ^ ^ >>\a\e[0m\a '
und etwas anders shell
für root
:
PS1=$'\a\r\a\e[1;34m\a ^ ^ ^ ^ ^ \a\e[31m\a${USER:=$(ulimit -c 0; \
id -un 2>/dev/null || echo \?)}@${HOSTNAME%%.*}\a\e[34m\a ^ ^ ^ ^ ^ ^ ^ \a\e[0;33m\a$(
local d=${PWD:-?} p=~
[[ $p = ?(*/) ]] || d=${d/#$p/~}
print -nr -- "$d"
)\a\e[1;34m\a ^ ^ \n ^ ^ ^ ^ ^ \a\e[32m\a$(date +%H:%M)\a\e[34m\a ^ ^ ^ ^ \a\e[0m\a '
Da die Sonderzeichen nicht kopiert wurden,hier ist eine Pastebin-Pastesowohl für den normalen Benutzer als auch für Root.
Antwort4
Dank vorheriger Antworten und anderer Quellen konnte ich Folgendes herausfinden:
Eingabeaufforderung der Korn-Shell:
PS1="$(echo "\033[32m`logname`\033[35m@\033[32m`hostname` \033[33m`pwd`\033[36m\n\$\033[0m")"
Bash-Eingabeaufforderung:
PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"
Diese geben die gleiche farbige Eingabeaufforderung (ja, ich spreche Queen's English ;)) im Format aus:
username@computername /current/working/directory
$
Das DOS-Äquivalent (obwohl es keine Farboptionen gibt) ist:
prompt %username%@%computername% $P$_$G
Das Ergebnis ist:
username@computername /current/working/directory
>
Das ">" bleibt eher DOS-mäßig als nix-mäßig mit "$", wenn Sie aber stattdessen das Siegel ("$") wollten, dann wäre es:
prompt %username%@%computername% $P$_$$
Vorausgesetzt, Ihr Anmeldekonto verfügt über die erforderlichen Berechtigungen, stellen Sie den „Nixies“ zum dauerhaften Speichern „export“ voran:
export PS1="..."
und ändern Sie das DOSsy in:
setx PROMPT "%username%@%computername% $P$_$G"
oder
setx PROMPT "%username%@%computername% $P$_$$"