Функции быстрого управления Bash довольно статичны. Если вы хотите больше контроля, вы можете включить переменные в ваше приглашение; убедитесь, что вы не отключили эту promptvars
опцию .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Обратите внимание на одинарные кавычки: раскрытие переменных должно происходить во время отображения приглашения, а не во время определения PS1
переменной.
Если вы хотите больше контроля над тем, что отображается, вы можете использовать подстановки команд. Например, приведенный выше фрагмент теряет ~
сокращение для домашнего каталога.
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
Этот код довольно громоздок, поэтому вместо того, чтобы вставлять его в PS1
переменную, вы можете использовать PROMPT_COMMAND
переменную для запуска кода, чтобы установить HPWD
и затем использовать его в своем приглашении.
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
Поскольку сокращенная подсказка изменялась только при смене каталога, вам не нужно пересчитывать ее каждый раз, когда отображается подсказка. Bash не предоставляет ловушку, которая запускается при текущем изменении каталога, но вы можете имитировать его , переопределяя cd
и его кузенов.
cd () { builtin cd "$@" && chpwd; }
pushd () { builtin pushd "$@" && chpwd; }
popd () { builtin popd "$@" && chpwd; }
chpwd () {
case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac
}
PS1='$HPWD \$'
Обратите внимание, что вам не нужно и не нужно экспортировать PS1
, так как это параметр оболочки, а не переменная окружения. PS1
Настройка bash не будет понята другими оболочками.
PS Если вы хотите получить приятную интерактивную оболочку, переключитесь на zsh , где все они (быстрые %
расширения, в основном включающие tcsh и chpwd
т. Д.) Являются встроенными функциями.
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2
должен дать вам эквивалент bash, но он не работает должным образом в моей системе.