3

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

1 ответ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 . )"
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .