Fitur kontrol cepat Bash agak statis. Jika Anda ingin lebih banyak kontrol, Anda bisa memasukkan variabel di prompt Anda; pastikan Anda belum mematikan promptvarsopsi .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Perhatikan tanda kutip tunggal: ekspansi variabel harus terjadi pada saat prompt ditampilkan, bukan pada saat PS1variabel didefinisikan.
Jika Anda ingin lebih mengontrol apa yang ditampilkan, Anda dapat menggunakan pergantian perintah. Misalnya, cuplikan di atas kehilangan ~singkatan untuk direktori home.
PS1='$(case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac; printf %s "$HPWD") \$ '
Kode ini agak rumit, jadi alih-alih menempelkannya ke dalam PS1variabel, Anda bisa menggunakan PROMPT_COMMANDvariabel untuk menjalankan kode untuk mengatur HPWDdan kemudian menggunakannya dalam prompt Anda.
PROMPT_COMMAND='case $PWD in
$HOME) HPWD="~";;
$HOME/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
$HOME/*) HPWD="~/${PWD##*/}";;
/*/*/*) HPWD="${PWD#"${PWD%/*/*}/"}";;
*) HPWD="$PWD";;
esac'
PS1='$HPWD \$'
Karena prompt yang diperpendek hanya berubah pada perubahan direktori, Anda tidak perlu menghitung ulang setiap kali prompt ditampilkan. Bash tidak menyediakan pengait yang berjalan pada perubahan direktori saat ini, tetapi Anda dapat mensimulasikannya dengan menimpa cddan sepupunya.
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 \$'
Perhatikan bahwa Anda tidak perlu, dan tidak boleh, mengekspor PS1, karena ini adalah pengaturan shell, bukan variabel lingkungan. PS1Pengaturan bash tidak akan dimengerti oleh shell lain.
PS Jika Anda ingin pengalaman shell interaktif yang bagus, beralihlah ke zsh , di mana semua ini ( %ekspansi cepat sebagian besar mencakup tcsh's chpwd,, dll.) Adalah fitur asli.
PS1='%2~ %# '
PS1='\w \$'; PROMPT_DIRTRIM=2seharusnya memberi Anda setara bash, tetapi itu tidak berfungsi dengan baik pada sistem saya.