Actualmente lo tengo PS1='\W'
, pero cuando estoy en un directorio con un enlace simbólico, el mensaje muestra el nombre del enlace simbólico, ¿cómo puedo hacer que PS1 muestre el nombre del directorio original?
Respuesta1
En Linux, puedes usar lo siguiente:
export PS1='$( readlink -f . )'
Ejemplo:
$ export PS1='$( readlink -f . ) \$ '
/home/danielbeck $ ln -s /etc foo
/home/danielbeck $ cd foo
/etc $ _
Tenga en cuenta que aún tendrá que hacer /home/danielbeck/foo
todo lo demás, como resolver directorios principales con cd ..
, así que, para continuar con el ejemplo:
/etc $ cd ..
/home/danielbeck $ _
Otra opción podría ser reemplazar cd
con una función que ingrese al directorio canónico en lugar del enlace simbólico, algo como:
function cd {
if [[ $# -ne 1 ]] ; then
builtin cd "$@"
elif [[ "$1" = "-" ]] ; then
builtin cd -
else
builtin cd "$( readlink -f "$1" )"
fi
}
Esto también podría funcionar para cualquier cd
argumento y soporte, incluso CDPATH
:
function cd {
builtin cd "$@"
builtin cd "$( readlink -f . )"
}
Respuesta2
Para agregar un poco de ayuda a aquellas personas como yo que quieren que PS1 se resuelva con enlaces simbólicos desreferenciados, edite .bashrc de la siguiente manera:
if [ "$color_prompt" = yes ]; then
PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]$(readlink -f \w)\[\033[00m\]\$ '
else
PS1='${debian_chroot:+($debian_chroot)}\u@\h:$(readlink -f \w)\$ '
fi
unset color_prompt force_color_prompt
# If this is an xterm set the title to user@host:dir
case "$TERM" in
xterm*|rxvt*)
PS1="\[\e]0;${debian_chroot:+($debian_chroot)}\u@\h: $(readlink -f .)\a\]$PS1"
;;
*)
;;
esac
Respuesta3
Es probable que ya tenga una PS1
variable personalizada en su ~/.bashrc
archivo y desee conservar el resto de personalizaciones.
En pocas palabras... simplemente ingrese ~/.bashrc
, busque dónde PS1
está definida la variable y reemplácela \w
con $( readlink -f . )
.