Bash'in hızlı kontrol özellikleri oldukça statiktir. Daha fazla denetim istiyorsanız, isteminize değişkenler ekleyebilirsiniz; promptvarsseçeneği kapatmadığınızdan emin olun .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Tek tırnaklara dikkat edin: Değişken açılımları, PS1değişkenin tanımlandığı zamanda değil, bilgi isteminin görüntülendiği sırada gerçekleşmelidir .
Görüntülenenler üzerinde daha fazla kontrol istiyorsanız, komut ikamelerini kullanabilirsiniz. Örneğin, yukarıdaki pasaj ~, giriş dizininin kısaltmasını kaybeder .
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
Bu kod oldukça hantaldır, bu nedenle PS1değişkeni içine yapıştırmak yerine, kodu çalıştırmak ve sonra bunu isteminizde kullanmak için PROMPT_COMMANDdeğişkeniHPWD kullanabilirsiniz.
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
Kısaltılmış bilgi istemi yalnızca bir dizin değişikliğinde değiştiği için, bir bilgi istemi her görüntülendiğinde yeniden hesaplamanız gerekmez. Bash, geçerli bir dizin değişikliğinde çalışan bir kanca sağlamaz, ancak onucd ve kuzenlerini geçersiz kılarak simüle edebilirsiniz .
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 \$'
PS1Bir ortam değişkeni değil, bir kabuk ayarı olduğundan dışa aktarmanız gerekmediğini ve dışa aktarmamanız gerektiğini unutmayın . Bir bash PS1ayarı diğer mermiler tarafından anlaşılamazdı.
PS Eğer güzel bir interaktif kabuk deneyimi istiyorsanız , tüm bunların ( büyük ölçüde tcsh'leri kapsayan istem genişletmeleri , vb.) Zsh'a geçin .%chpwd
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2size bash eşdeğerini vermeli, ancak bu benim sistemimde düzgün çalışmıyor.