Bash'ın PROMPT_COMMAND ürününe bağlandığında, bu işlev her yeni istem aldığınızda çalışır, bu nedenle özel geçmiş istediğiniz bir dizinde olup olmadığınızı kontrol etmek için uygun bir zamandır. Fonksiyonun dört ana dalı vardır:
- Geçerli dizin (
$PWD
) değişmediyse, hiçbir şey yapmayın (dönüş).
PWD Eğer gelmiştir değişti, o zaman tek amacı faktörüne tek bir yerde "özel dizin" kodudur yerel işlev oluşturdunuz. Test dizinlerimi kendi dizininizle (birbirinden ayrılarak |
) değiştirmek isteyeceksiniz .
- Özel bir dizine girmedik veya özel bir dizini değiştirmediysek, "önceki dizin" değişkenini güncelleyin ve işlevden çıkın.
Dizinleri değiştirdiğimizden, "önceki dizin" değişkenini güncelleyin, ardından bellek içi geçmişini HISTFILE klasörüne kaydedin ve bellek içi geçmişini silin.
Biz değiştirdiyseniz içine özel bir dizine, sonra olmak HISTFILE set .bash_history
geçerli dizinde dosya.
Aksi halde, değiştirdik dışarı böylece stok birine HISTFILE sıfırlamak, özel bir dizine.
Son olarak, geçmiş dosyalarını değiştirdiğimiz için, önceki geçmişi tekrar okuyun.
İşleri devam ettirmek için komut dosyası PROMPT_COMMAND değerini ayarlar ve iki dahili kullanım değişkenini (stok HISTFILE ve "önceki dizin") kaydeder.
prompt_command() {
# if PWD has not changed, just return
[[ $PWD == $_cust_hist_opwd ]] && return
function iscustom {
# returns 'true' if the passed argument is a custom-history directory
case "$1" in
( */tmp/faber/somedir | */tmp/faber/someotherdir ) return 0;;
( * ) return 1;;
esac
}
# PWD changed, but it's not to or from a custom-history directory,
# so update opwd and return
if ! iscustom "$PWD" && ! iscustom "$_cust_hist_opwd"
then
_cust_hist_opwd=$PWD
return
fi
# we've changed directories to and/or from a custom-history directory
# save the new PWD
_cust_hist_opwd=$PWD
# save and then clear the old history
history -a
history -c
# if we've changed into or out of a custom directory, set or reset HISTFILE appropriately
if iscustom "$PWD"
then
HISTFILE=$PWD/.bash_history
else
HISTFILE=$_cust_hist_stock_histfile
fi
# pull back in the previous history
history -r
}
PROMPT_COMMAND='prompt_command'
_cust_hist_stock_histfile=$HISTFILE
_cust_hist_opwd=$PWD