Функції швидкого керування Баша доволі статичні. Якщо ви хочете більше контролю, ви можете включити змінні у своє запит; переконайтеся, що ви не відключили цю 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, але це не працює належним чином у моїй системі.