Fitur kontrol cepat Bash agak statis. Jika Anda ingin lebih banyak kontrol, Anda bisa memasukkan variabel di prompt Anda; pastikan Anda belum mematikan promptvars
opsi .
PS1='${PWD#"${PWD%/*/*}/"} \$ '
Perhatikan tanda kutip tunggal: ekspansi variabel harus terjadi pada saat prompt ditampilkan, bukan pada saat PS1
variabel 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 PS1
variabel, Anda bisa menggunakan PROMPT_COMMAND
variabel untuk menjalankan kode untuk mengatur HPWD
dan 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 cd
dan 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. PS1
Pengaturan 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=2
seharusnya memberi Anda setara bash, tetapi itu tidak berfungsi dengan baik pada sistem saya.