Функції швидкого керування Баша доволі статичні. Якщо ви хочете більше контролю, ви можете включити змінні у своє запит; переконайтеся, що ви не відключили цю 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Інші оболонки не можуть зрозуміти баш- налаштування.
PS Якщо ви хочете насолодитись інтерактивним досвідом оболонки, перейдіть на zsh , де всі ці (швидкі %розширення, що значною мірою охоплюють tcsh, chpwdі т. Д.) Є натільними особливостями.
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2слід дати вам еквівалент bash, але це не працює належним чином у моїй системі.