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 ?
Réponses
Trop de publicités?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 . )"
}
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