Mensaje de color en KornShell

Mensaje de color en KornShell

De acuerdo aesta publicación de StackOverflow, es posible tener un mensaje de color en KornShell. No he podido descubrir cómo hacer esto. Puedo usar color:

echo -e "\033[34mLinux\033[00m"

da una salida azul "Linux", al igual que:

printf "\033[34mLinux\033[00m"

Sin embargo, cuando incorporo los códigos de escape en mi PS1variable de solicitud, no se escapan. ¿Qué debo hacer para obtener un mensaje en color? Además de ser una especie de fanático de los atractivos visuales, encuentro que un mensaje de color es útil al analizar visualmente la salida.

Respuesta1

Simplemente use un carácter Esc literal, ingresado con Ctrl- v( Escse mostrará como ^[en la pantalla):

PS1="^[[34mLinux^[[00m"

O use la salida del echocomando que descubra que está funcionando:

PS1="$(echo -e "\033[35mLinux\033[00m")"

Respuesta2

Debes poner un carácter de escape literal en la PS1variable. Ksh88 y clones como pdksh y mksh (versiones anteriores) no tienen sintaxis literal para los caracteres de control excepto a través del printincorporado. Mksh entiende \eescape, pero pdksh requiere el código octal \033.

PS1=$(print '\033[34mLinux\033[00m')

ATT ksh93 introduce la sintaxis literal con reacción de escape $'…'(también disponible en mksh desde R39b). Puede utilizar barras invertidas para colocar caracteres de control en estos literales.

PS1=$'\e[34mLinux\e[00m'

Respuesta3

Los uso mkshpara un usuario 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 '

Y un poco diferente shellpara 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 '

ingrese la descripción de la imagen aquí

Como los caracteres especiales no se copiaron,Aquí hay una pasta de Pastebin.tanto para el usuario normal como para el root.

Respuesta4

Gracias a respuestas anteriores y otras fuentes, pude encontrar estas:

Mensaje de shell Korn:

PS1="$(echo "\033[32m`logname`\033[35m@\033[32m`hostname` \033[33m`pwd`\033[36m\n\$\033[0m")"

Mensaje de bash:

PS1="\[\e[32m\]\u\[\e[35m\]@\[\e[32m\]\h \[\e[33m\]\w\[\e[36m\]\n\$\[\e[0m\]"

Estos dan el mismo mensaje de color (sí, hablo inglés de Queen;)) en el formato:

username@computername /current/working/directory
$

El equivalente de DOS (aunque no hay opciones de color) es:

prompt %username%@%computername% $P$_$G

lo que da:

username@computername /current/working/directory
>

El ">" lo mantiene 'DOSsy' en lugar de 'nixy' con "$", pero si quisieras el sigilo ("$") entonces sería:

prompt %username%@%computername% $P$_$$

Siempre que su cuenta de inicio de sesión tenga los permisos necesarios, para que los 'nixies' sean permanentes, antepóngalos con "exportar":

export PS1="..."

y cambie el DOSsy a:

setx PROMPT "%username%@%computername% $P$_$G"

o

setx PROMPT "%username%@%computername% $P$_$$"

información relacionada