В настоящее время у меня PS1='\W'
но когда в каталоге символьной ссылки отображается подсказка, отображается имя символической ссылки, как я могу сделать так, чтобы PS1 показывал оригинальное имя каталога?
3
1 ответ
5
В Linux вы можете использовать следующее:
export PS1='$( readlink -f . )'
Пример:
$ export PS1='$( readlink -f . ) \$ '
/home/danielbeck $ ln -s /etc foo
/home/danielbeck $ cd foo
/etc $ _
Обратите внимание, что вы по-прежнему будете в /home/danielbeck/foo
для всего остального, например, для разрешения родительских каталогов с помощью cd ..
, поэтому, чтобы продолжить пример:
/etc $ cd ..
/home/danielbeck $ _
Другой вариант может заменить cd
функцией, которая входит в канонический каталог вместо символической ссылки, что-то вроде:
function cd {
if [[ $# -ne 1 ]] ; then
builtin cd "$@"
elif [[ "$1" = "-" ]] ; then
builtin cd -
else
builtin cd "$( readlink -f "$1" )"
fi
}
Это также может работать для любых аргументов cd
и поддерживает даже CDPATH
:
function cd {
builtin cd "$@"
builtin cd "$( readlink -f . )"
}