Dengan menghubungkan ke PROMPT_COMMAND bash, fungsi ini dijalankan setiap kali Anda mendapatkan prompt baru, jadi ini saat yang tepat untuk memeriksa untuk melihat apakah Anda berada di direktori yang Anda inginkan untuk riwayat khusus. Fungsi ini memiliki empat cabang utama:
- Jika direktori saat ini (
$PWD
) tidak berubah, maka jangan lakukan apa pun (kembali).
Jika PWD telah berubah, maka kami mengatur fungsi lokal yang hanya bertujuan untuk memfaktorkan kode "direktori khusus" menjadi satu tempat. Anda ingin mengganti direktori pengujian saya dengan milik Anda sendiri (dipisahkan oleh |
).
- Jika kami belum mengubah ke atau keluar dari direktori khusus, maka cukup perbarui variabel "direktori sebelumnya" dan kembali dari fungsi.
Karena kami telah mengubah direktori, perbarui variabel "direktori sebelumnya", lalu simpan riwayat di dalam memori ke HISTFILE, lalu hapus riwayat di dalam memori.
Jika kami telah berubah menjadi direktori khusus, maka setel HISTFILE menjadi .bash_history
file di direktori saat ini.
Jika tidak, kami telah mengubah dari direktori kustom, sehingga ulang HISTFILE dengan yang saham.
Akhirnya, karena kami telah mengubah file riwayat, bacalah kembali riwayat sebelumnya.
Untuk menyelesaikannya, skrip menetapkan nilai PROMPT_COMMAND dan menyimpan dua variabel penggunaan internal (stok HISTFILE dan "direktori sebelumnya").
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