Сделать так, чтобы PS1 Bash показывал оригинальное имя каталога, а не символическую ссылку?

774
Petruza

В настоящее время у меня есть, PS1='\W'но когда в каталоге символических ссылок, приглашение показывает имя символической ссылки, как я могу сделать PS1, чтобы показать оригинальное имя каталога?

2

1 ответ на вопрос

4
Daniel Beck

В 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 . )" } 

Похожие вопросы