Farbige Eingabeaufforderung in KornShell

Farbige Eingabeaufforderung in KornShell

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 PS1Prompt-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 echoBefehls, 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 PS1Variable einfügen. Ksh88 und Klone wie pdksh und mksh (ältere Versionen) haben keine wörtliche Syntax für Steuerzeichen, außer über die printintegrierten. Mksh versteht \eEscape, 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 mkshfü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 shellfü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 '

Bildbeschreibung hier eingeben

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$_$$"

verwandte Informationen