Usando o launchd para limpar o histórico do bash?

Oct 23 2020

Esclarecimento: Não estou procurando destruir history, estou procurando meios de purgá-lo periodicamente launchdpara fins de segurança

Tenho usado cat /dev/null > ~/.bash_historypara limpar o histórico do bash, como visto em muitas conversas do * nix, como a maneira mais eficaz de fazer isso.

Então, eu o coloco em um script de shell que é executado launchd, mas depois de algum tempo percebi que embora ele seja executado, ele não está limpando o histórico.

É possível limpar o histórico do bash dessa forma por meio do script bash ou isso só pode ser feito manualmente como um usuário? Talvez eu precise executar o comando diretamente no .plist e não por meio de um script bash?

Nota: Eu tenho outros scripts funcionando corretamente via launchd, então a questão é estritamente sobre ser capaz de limpar o histórico por meio de um agente

Obrigado

Atualização: Encontrei este site legal que ajuda a gerar launchdscripts, se isso ajudar alguém. Não posso garantir isso, mas é muito mais fácil do que hackear XML. Parece ser usado sh -cpara todos os comandos, então não tenho certeza por que isso acontece.

iniciar gerador plist http://launched.zerowidth.com/

Respostas

5 Seamus Oct 23 2020 at 16:25

Sua bashhistória consiste em duas "histórias", não uma. Um desses históricos é armazenado em um arquivo - seu tamanho / profundidade é governado pelo parâmetro HISTFILESIZE. O outro histórico é armazenado em cache na memória - seu tamanho é controlado pelo parâmetro HISTSIZE.

Você pode verificar o tamanho / profundidade de suas histórias:

$ echo $HISTFILESIZE 
$ echo $HISTSIZE

A razão para dois históricos é que um está associado a cada sessão de shell ( HISTSIZE), enquanto o outro histórico é um arquivo ~/.bash_historyque é "permanente" e, eventualmente, recebe os históricos de sessão quando eles ultrapassam sua profundidade máxima ou quando a sessão é encerrada. Isso é um pouco complicado de explicar e a imagem abaixo pode ajudar a esclarecer a relação entre essas duas histórias.

Mas voltando ao seu objetivo:

Em vez de tomar medidas para excluir seu histórico, você pode simplesmente definir HISTSIZEe HISTFILESIZEzerar ~/.bashrc:

HISTSIZE=0
HISTFILESIZE=0

Se não é isso que você deseja, certamente pode excluir o arquivo de histórico periodicamente, mas saiba que isso não exclui o histórico da sessão . Excluindo seu arquivo de histórico através da construção de um .plistarquivo não é necessário. O historycomando é a ferramenta a ser usada para este trabalho (consulte history --helppara obter detalhes). O seguinte comando excluirá o histórico de uma sessão :

$ history -cw

A exclusão do conteúdo do arquivo de histórico ( ~/.bash_history) é feita de maneira convencional:

$ > ~/.bash_history

Você pode colocar um ou ambos os comandos em um crontab, mas precisará garantir que o shell padrão esteja bashcomo historyestá embutido .

Para obter informações sobre o assunto do histórico do shell, você pode ler estas perguntas e respostas relacionadas . Pertence a zsh- não bash, mas os princípios são os mesmos.

5 jksoegaard Oct 23 2020 at 14:41

Parece que você encontrou uma solução muito complicada para o problema de não querer um bash_history.

Aconselho que, em vez de limpar periodicamente o histórico do launchd, você simplesmente desative a gravação do histórico:

echo 'set +o history' >> ~/.bashrc

Feche a guia do terminal e abra uma nova - e seu histórico não será mais registrado.