Você pode usar a variável de ambiente HISTIGNORE
.
Uma lista de padrões separados por dois pontos usados para decidir quais linhas de comando devem ser salvas na lista de histórico. Por exemplo:
export HISTIGNORE="cd*:ls*"
isto irá ignorar todos os comandos cd e ls do histórico.
EDITAR:
desculpe, na minha primeira leitura eu não tomei cuidado suficiente para a sua pergunta. Btw, você está certo: HISTIGNORE
é uma configuração muito difícil, e bash_history simplesmente irá ignorar cada comando que está listado nesta variável (ela irá ignorá-lo no momento em que você executá-lo, se já houver entradas com esse comando em seu HISTFILE
eles serão encontrados pela pesquisa reversa do histórico.
Para responder primeiro à sua última pergunta, a história escrita e ao vivo pode variar muito se você usar terminais diferentes simultaneamente. Você poderia tentar uma solução conforme descrito aqui:
Preserve o histórico bash em várias janelas de terminal
O que você pode imaginar é uma solução na qual você usa uma função em seu arquivo ~/.bash_logout
, que apagará as entradas do histórico que você não deseja.
algo como isso deve fazer o que você quer:
function clear_history(){
# hist_ignore regex, this may be done in a more fancy way,
# such as using an env variable, but anyway
MYHISTIGNORE='^cd:^view:^cat'
# write down history to file
history -w
# create a new tmp file for history
tmpFile=$(mktemp)
cp ${HISTFILE} ${tmpFile}
# use it to filter history
for myRegex in $(echo $MYHISTIGNORE | awk 'BEGIN{FS=":"}{for (i=1;i<=NF;i++){print $i}}'); do
sed -i "/${myRegex}/d" ${tmpFile}
done
# and copy it back to history file
mv ${tmpFile} ${HISTFILE}
}