4 votes

Faire en sorte que le PS1 de Bash affiche le nom du répertoire original et non le lien symbolique ?

J'ai actuellement PS1='\W' mais quand on est dans un répertoire avec un lien symbolique, l'invite affiche le nom du lien symbolique, comment puis-je faire pour que PS1 affiche le nom du répertoire original ?

6voto

Daniel Beck Points 105590

Sous Linux, vous pouvez utiliser ce qui suit :

export PS1='$( readlink -f . )'

Exemple :

$ export PS1='$( readlink -f . ) \$ '
/home/danielbeck $ ln -s /etc foo
/home/danielbeck $ cd foo
/etc $ _

Notez que vous serez toujours dans /home/danielbeck/foo pour tout le reste, comme la résolution des répertoires parents avec cd .. donc, pour continuer l'exemple :

/etc $ cd ..
/home/danielbeck $ _

Une autre option pourrait être de remplacer cd avec une fonction qui entre le répertoire canonique au lieu du lien symbolique, quelque chose comme :

function cd {
    if [[ $# -ne 1 ]] ; then
        builtin cd "$@"
    elif [[ "$1" = "-" ]] ; then
        builtin cd -
    else
        builtin cd "$( readlink -f "$1" )"
    fi
}

Cela peut également fonctionner pour tout cd arguments et soutiens même CDPATH :

function cd {
    builtin cd "$@"
    builtin cd "$( readlink -f . )"
}

0voto

Robin Coe Points 101

Pour aider les personnes qui, comme moi, veulent que PS1 se résolve avec les liens symboliques déréférencés, modifiez le fichier .bashrc comme suit :

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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X