Pregunta

En mi situación actual, no es raro para mí tener varios equipos UNIX que conectarse, como varios usuarios diferentes en función de la situación, y para recorrer a través de varios directorios en las máquinas de hacer las cosas. Yo uso ksh través de toda la cosa.

Yo estaba jugando con mi pronta recientemente, y yo era capaz de conseguir que cambiar algunos colores dependiendo de mi nombre de usuario y servidor actual. Sin embargo, lo que también me gustaría es para que cambie de colores basada en mi directorio actual. Por ejemplo, si yo estuviera en el directorio "foo", el símbolo debe ser de color amarillo, pero si yo fuera en el directorio "bar", el símbolo sería magenta. En ambos casos, los subdirectorios también deben contar, por lo que una simple comprobación subcadena debería ser suficiente.

El problema me encontré, sin embargo, es que cuando ejecuto mi script .profile, de forma adecuada los colores del directorio - pero ya no se actualiza dinámicamente cada vez que me cambio a otro directorio - y no estoy seguro de cómo antes yo toda la ramificación, yo era capaz de conseguir que imprimir mi directorio de trabajo actual correctamente incluso después de que cambié directorios.

Hice algunas google y buscar información para bash, ksh, pero parece ser ignorado en gran medida. Como no puedo encontrar la manera de hacer esto por mi cuenta, he de llevarlo a la comunidad de desbordamiento de pila, para agregarlo a los conocimientos futuro. Por lo tanto, con mi explicación de largo aliento, la versión "rápida" de mi pregunta es la siguiente:

En ksh, ¿cómo puedo configurar mi mensaje para visualizar el directorio de trabajo actual y el color del texto en función de que el directorio de trabajo actual es? ¿Es posible?

Otros consejos

¿Por qué no usar zsh? Se basa en ksh, y es mucho más potente. En zsh se puede escribir la función chpwd que se llama implícitamente cada vez que cambie de directorio. En esta función se puede comprobar el directorio actual y establecer PS1 a lo que quieras.

Como alternativa (incluso en ksh) puede crear un alias para el comando cd:

change_my_ps() {
  PS1=...
}
better_cd() {
  builtin cd "$@"
  change_my_ps
}
alias cd=better_cd

Algo como esto. No estoy seguro de que es correcto, no me acuerdo sintaxis ksh.

Para visualizar el directorio actual en ksh, poner esto en el archivo .profile: Export PS1 = "\ $ PWD" Eso va a actualizar de forma dinámica cuando cambie directorio sin rededor funciones.

Dado que en realidad nadie respondió a la parte sobre el color, así es como yo lo haría. No puedo colorear el texto, por lo que también he incluido una captura de pantalla de mi terminal.

la página de Wikipedia sobre los códigos de escape ANSI para la lista completa de los códigos de color y print --man y printf --man para los detalles de la impresión de secuencias de escape en ksh.

(Tenga en cuenta que ksh93v, actualmente en fase beta, contendrá un idioma de instrucciones basada (creo) el de golpe, lo que hará que este tipo de cosas un poco más fácil, aunque creo que es probable que todavía tiene que usar algo como esta función hacer indicaciones condicionales complejas como ésta.)

> cat ~/scripts/prompt    
function prompt
{
    set -eu
    typeset c=
    case $PWD in
        */foo) c=3;; # yellow
        */bar) c=5;; # magenta
    esac
    print "\E[3${c}m$PWD\E[m > "
}
PS1='`prompt`'
> . ~/scripts/prompt
/Users/adavies > cd foo  
/Users/adavies/foo > cd ../bar
/Users/adavies/bar > 

introducir descripción de la imagen aquí

Yo uso este:

function chdir
{
   cd "$@"
   CWDH=${PWD%/*}
   PS1="($_time)$hname:${CWDH##*/}/${PWD##*/} ->"
   export PS1
}
alias cd=chdir
chdir .

Ignorar el tiempo y HNAME, pero el resto debe trabajar para usted. cambio de colores va a ser terminal dependiente. Es necesario conocer los códigos de escape para cada color para el terminal que va a utilizar. Si sabe que utiliza de forma permanente un xterm, será más fácil.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top