¿Hacer que la PS1 de Bash muestre el nombre del directorio original y no el enlace simbólico?

¿Hacer que la PS1 de Bash muestre el nombre del directorio original y no el enlace simbólico?

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/footodo 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 cdcon 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 cdargumento 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 PS1variable personalizada en su ~/.bashrcarchivo y desee conservar el resto de personalizaciones.

En pocas palabras... simplemente ingrese ~/.bashrc, busque dónde PS1está definida la variable y reemplácela \wcon $( readlink -f . ).

información relacionada