Collegandosi a PROMPT_COMMAND di bash, questa funzione viene eseguita ogni volta che si riceve un nuovo prompt, quindi è un momento decente per verificare se ci si trova in una directory per la quale si desidera una cronologia personalizzata. La funzione ha quattro rami principali:
- Se la directory corrente (
$PWD
) non è cambiata, non fare nulla (return).
Se il PWD è cambiato, allora impostiamo una funzione locale il cui unico scopo è di fattorizzare il codice "directory personalizzata" in un unico posto. Ti consigliamo di sostituire le mie directory di test con le tue (separate da |
).
- Se non siamo passati da o verso una directory personalizzata, è sufficiente aggiornare la variabile "directory precedente" e tornare fuori dalla funzione.
Dato che abbiamo cambiato directory, aggiorna la variabile "directory precedente", quindi salva la cronologia in memoria nel HISTFILE, quindi cancella la cronologia in memoria.
Se siamo passati a una directory personalizzata, imposta HISTFILE come .bash_history
file nella directory corrente.
Altrimenti, siamo passati da una directory personalizzata, quindi reimpostare HISTFILE su quello stock.
Infine, poiché abbiamo modificato i file della cronologia, rileggili nella cronologia precedente.
Per iniziare, lo script imposta il valore PROMPT_COMMAND e salva due variabili di uso interno (il file HISTFILE e la "directory precedente").
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