¿Cómo puedo acortar la ruta actual del bash prompt a una letra por directorio?


9

No puedo recordar dónde, pero ya he visto la ruta actual del indicador bash acortada de una manera interesante: cada directorio contenido en la ruta (excepto el último) se reemplaza por su primera letra solamente. Por ejemplo: path/to/some/directoryse acortaría a p/t/s/directory.

¿Cómo puedo reproducir ese comportamiento?


No puedes hacer esto directamente PS1. Tendría que configurar PS1para contener una variable ( PS1='${SHORT_PWD}\\$') y actualizar esa variable en $PROMPT_COMMAND.
Gilles 'SO- deja de ser malvado'

@Gilles 'parada SO ser maligno' Seguro que puede hacerlo directamente, si utiliza comillas dobles que necesita para barra invertida \$()sustituciones de mando, aunque
bac0n

Respuestas:


8

Después de jugar con esto por un tiempo, obtuve la respuesta que necesita:

Agregue esto a su archivo .bashrc en su directorio de inicio, salga de la terminal y vuelva a ingresarlo y recibirá su mensaje.

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/([^/]{,2})[^/]*|/\1|g'
}

Utiliza la función declarada sps()para evaluar la ruta cada vez PS1que se muestra la variable que es la solicitud.

es decir

/ho/de/De/Ap/Ti$ pwd
/home/deth/Desktop/Apps/Tivo
/ho/de/De/Ap/Ti$ 

O ... si insistes en una letra

PS1='$(eval "sps")$ '
sps() {
   echo "$PWD" | sed -r 's|/(.)[^/]*|/\1|g'
}

Que muestra:

/h/d/D/A/T$ pwd
/home/deth/Desktop/Apps/Tivo
/h/d/D/A/T$ 

Gracias Meer Mi mensaje realmente está eliminando la user@pcparte. ¿Cómo puedo manejar esto?
Alex

3

Para truncar todos los nombres de directorio excepto el último:

PS1='$(eval "sps")$ '                                                                                
sps() {                                                                                              
    python -c "import sys; dirs = sys.argv[1].split('/'); print '/'.join(d[:1] for d in dirs[:-1]) + '/' + dirs[-1]" $PWD
}

¿Esto no funciona cuando cambio los directorios?
Aditya Varma

1

acorte todos los nombres excepto el último sin python:

user:/h/u/D/C/current$ 
sps() {
    echo `dirname $PWD` | sed -r 's|/(.)[^/]*|/\1|g'
}
PS1='\u:$$(eval "sps")/\W\$ '
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.