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 PS1
variable 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 echo
comando que descubra que está funcionando:
PS1="$(echo -e "\033[35mLinux\033[00m")"
Respuesta2
Debes poner un carácter de escape literal en la PS1
variable. Ksh88 y clones como pdksh y mksh (versiones anteriores) no tienen sintaxis literal para los caracteres de control excepto a través del print
incorporado. Mksh entiende \e
escape, 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 mksh
para 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 shell
para 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 '
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$_$$"