Conectando-se ao PROMPT_COMMAND do bash, esta função é executada toda vez que você obtém um novo prompt, portanto, é um tempo decente verificar se você está em um diretório para o qual deseja um histórico personalizado. A função tem quatro ramificações principais:
- Se o diretório atual (
$PWD
) não foi alterado, não faça nada (retornar).
Se o PWD tiver alterado, então configuramos uma função local cuja única finalidade é incluir o código "diretório customizado" em um único local. Você vai querer substituir meus diretórios de teste por seus próprios (separados por |
).
- Se não tivermos alterado ou desativado 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 alteramos para um diretório personalizado, defina HISTFILE como um arquivo
.bash_history
no diretório atual. -
Caso contrário, alteramos para fora de um diretório personalizado, portanto, redefina HISTFILE para o arquivo de estoque.
Por fim, como alteramos os arquivos de histórico, leia esse 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