Bash'in hızlı kontrol özellikleri oldukça statiktir. Daha fazla denetim istiyorsanız, isteminize değişkenler ekleyebilirsiniz; promptvars
seçeneği kapatmadığınızdan emin olun .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Tek tırnaklara dikkat edin: Değişken açılımları, PS1
değ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 PS1
değişkeni içine yapıştırmak yerine, kodu çalıştırmak ve sonra bunu isteminizde kullanmak için PROMPT_COMMAND
değ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 \$'
PS1
Bir 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 PS1
ayarı 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=2
size bash eşdeğerini vermeli, ancak bu benim sistemimde düzgün çalışmıyor.