Підключившись до PROMPT_COMMAND bash, ця функція запускається щоразу, коли ви отримуєте нове підказку, тому пристойний час перевірити, чи є ви в каталозі, для якого ви хочете користувацьку історію. Функція має чотири основні гілки:
- Якщо поточний каталог (
$PWD) не змінився, не робіть нічого (повернення).
Якщо PWD був змінений, то ми створили локальну функцію, єдиною метою якої є фактора «користувальницького каталогу» код в одному місці. Ви хочете замінити мої тестові каталоги на власні (розділені на |).
- Якщо ми не перейшли у спеціальний каталог або вийшли з нього, просто оновіть змінну «попередній каталог» та поверніться з функції.
Оскільки ми змінили каталоги, оновіть змінну "попередній каталог", а потім збережіть історію в пам'яті в HISTFILE, а потім очистіть історію в пам'яті.
Якщо ми перейшли в спеціальний каталог, то встановіть HISTFILE як .bash_historyфайл у поточній директорії.
В іншому випадку, ми змінили з користувальницького каталогу, тому скидання HISTFILE на складі одного.
Нарешті, оскільки ми змінили файли історії, прочитайте їх у попередній історії.
Щоб покращити ситуацію, сценарій встановлює значення PROMPT_COMMAND і зберігає дві змінні внутрішнього використання (фондовий HISTFILE та "попередній каталог").
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