Ao conectar-se ao PROMPT_COMMAND do bash, essa função é executada toda vez que você recebe um novo prompt, portanto, é um momento decente para verificar se você está em um diretório para o qual deseja um histórico personalizado. A função possui quatro ramos principais:
- Se o diretório atual (
$PWD
) não mudou, não faça nada (retorne).
Se o PWD foi alterado, configuramos uma função local cujo único objetivo é fatorar o código do "diretório personalizado" em um único local. Você deseja substituir meus diretórios de teste pelos seus (separados por |
).
- Se não tivermos mudado para dentro ou fora de um diretório personalizado, basta atualizar a variável "diretório anterior" e retornar à função.
Como alteramos os diretórios, atualize a variável "diretório anterior", salve o histórico da memória no HISTFILE e limpe o histórico da memória.
Se tivermos mudado para um diretório personalizado, defina HISTFILE como um .bash_history
arquivo no diretório atual.
Caso contrário, mudamos de um diretório personalizado, portanto, redefina o HISTFILE para o diretório padrão.
Por fim, como alteramos os arquivos de histórico, leia novamente no histórico anterior.
Para fazer as coisas funcionarem, o script define o valor PROMPT_COMMAND e salva duas variáveis de uso interno (o estoque HISTFILE e o "diretório anterior").
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