Primeiro de tudo, pode ser mais simples mapear seus botões Up e Abaixo para history-search-backward
e history-search-forward
, respectivamente. De man bash
:
history-search-forward
Search forward through the history for the string of characters
between the start of the current line and the point. This is a
non-incremental search.
history-search-backward
Search backward through the history for the string of characters
between the start of the current line and the point. This is a
non-incremental search.
Com isto ativado, se começar a digitar o nome do seu comando e depois pressionar Up , apenas os comandos do seu histórico começando com o que você digitou serão mostrados. Dessa forma, você pode rapidamente encontrar o comando no qual está interessado e não precisa mexer nos arquivos de histórico específicos do diretório. Apenas digite s
, então Up e somente os comandos que começam com s
serão encontrados. Use fooba
e somente aqueles que começam com fooba
serão mostrados.
Para habilitar isso, adicione as seguintes linhas ao seu arquivo ~/.inputrc
no servidor (dependendo do seu emulador de terminal, você pode precisar de um formato ligeiramente diferente. Dê uma olhada na minha resposta aqui se este não funcionar):
"\e[A": history-search-backward
"\e[B": history-search-forward
Dito isto, sim, é possível definir um arquivo de histórico por diretório. Adicione esta função ao seu ~/.profile
(não ao seu ~/.bashrc
, pois este arquivo não é lido por padrão ao usar ssh
para efetuar login em um computador remoto):
setHistFile(){
targetDirs=("/home/terdon/foo" "/home/terdon/bar")
for dir in "${targetDirs[@]}"; do
if [[ "$dir" = "$PWD" ]]; then
## Set the history file name
export HISTFILE="./.bash_history"
## clear current history
history -c
## read history from the $HISTFILE
history -r
## Exit the function
return
fi
done
## This will be run if the PWD is not in
## the targetDirs array
export HISTFILE="$HOME/.bash_history"
## Read the history (in case we are leaving
## one of the targetDirs)
history -r
}
E, em seguida, defina sua variável PROMPT_COMMAND
(esse é um comando executado toda vez que um prompt de shell é mostrado):
export PROMPT_COMMAND='setHistFile'
Altere a matriz targetDirs
para a lista dos diretórios que você deseja ter seu próprio arquivo de histórico.