Usando o launchd para limpar o histórico do bash?
Esclarecimento: Não estou procurando destruir
history, estou procurando meios de purgá-lo periodicamentelaunchdpara 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 usadosh -cpara todos os comandos, então não tenho certeza por que isso acontece.iniciar gerador plist http://launched.zerowidth.com/
Respostas
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.
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.